javascript - 正则表达式排除以哈希标签开头的单词

标签 javascript regex

我正在寻求帮助,以制定一个正则表达式,该正则表达式将匹配票号单词(任意数量的字符后跟数字),但不匹配以 #SN- 开头的单词。有什么想法吗?

示例字符串:

A string with has ref like #SN-INC0000058 and simple mention like INC0000059.

正则表达式匹配:INC0000059

我目前陷入了这个故障,它匹配“#SN-”后面的数字,而不是排除整个单词/字符串。我怀疑 - 被视为断词...有什么想法吗?

/(?!#SN-)([A-Z]+[0-9]+)\b/g

https://www.regexpal.com/?fam=99443

最佳答案

由于 Javascript 正则表达式没有lookbehind 功能,因此无法通过简单的模式捕获您想要的内容。但是,在替换上下文中,您可以使用函数作为替换参数和系统地 try catch 您不想要的部分的模式轻松处理此问题:

var result = yourstr.replace(/(#SN-)?\b[A-Z]+[0-9]+\b/g, function(m,g1) {
    return g1 ? m : 'yourreplacement';
});

当捕获组 1 被定义时,该函数返回整个匹配,否则返回替换字符串。

请注意,在函数内部,您不能对整个匹配或捕获组使用 $&$1..$n 占位符。您必须使用函数参数来计算它们。

<小时/>

只是为了更严格,如果您在目标之前描述了所有可能性,也可以在没有回调函数的情况下完成,但是编写起来很痛苦并且效率不高,因为模式以交替开始:

var result = yourstring.replace(/(^|[^-]|(?:[^N]|^)-|(?:[^S]|^)N-|(?:^|[^#])SN-)\b[A-Z]+[0-9]+\b/g, '$1yourreplacement');

关于javascript - 正则表达式排除以哈希标签开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114562/

相关文章:

javascript - 为 chrome 扩展注入(inject) CSS

javascript - 使用 JavaScript 以编程方式按下 Alt 0

javascript - 滚动时 react native 自动隐藏导航 ios

ruby - 具有命名捕获组的正则表达式在 Ruby 中获取所有匹配项

php - 方括号中的空格与空格有不同的含义吗?

C++字符替换

regex - sed 匹配日期格式 2013 年 4 月 25 日

javascript - 这段 ES6 代码做了什么?

javascript - FFI 中带有 Aff 回调的函数

javascript - Tampermonkey 匹配所有子目录