我正在寻求帮助,以制定一个正则表达式,该正则表达式将匹配票号单词(任意数量的字符后跟数字),但不匹配以 #SN-
开头的单词。有什么想法吗?
示例字符串:
A string with has ref like #SN-INC0000058 and simple mention like INC0000059.
正则表达式匹配:INC0000059
我目前陷入了这个故障,它匹配“#SN-”后面的数字,而不是排除整个单词/字符串。我怀疑 - 被视为断词...有什么想法吗?
/(?!#SN-)([A-Z]+[0-9]+)\b/g
最佳答案
由于 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/