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

时间:2017-11-04 19:12:41

标签: javascript regex

我正在寻找帮助,提出一个正则表达式,它将匹配票号字(任意数字后跟数字)但不包括以#SN-开头的字符。有什么想法吗?

示例字符串:

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

RegEx匹配:INC0000059

我目前仍然坚持这个与“#SN-”之后的数字匹配的细分,而不是排除整个单词/字符串。我怀疑 - 被视为一个单词突破......任何想法?

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

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

1 个答案:

答案 0 :(得分:1)

由于Javascript正则表达式没有lookbehind功能,因此无法用简单的模式捕捉到你想要的东西。但是,在替换上下文中,您可以使用函数作为替换参数以及系统地尝试捕获您不想要的部分的模式来轻松处理此问题:

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');