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

Javascript 正则表达式以排除以哈希标记开头的单词,javascript,regex,Javascript,Regex,我正在寻找帮助,提出一个正则表达式,它将匹配票号字,任何数字后面的字符数,但不是以SN-开头的字符数。有什么想法吗 示例字符串: A string with has ref like #SN-INC0000058 and simple mention like INC0000059. 正则表达式匹配项:INC0000059 我目前被困在这个细分中,它与“SN-”后面的数字匹配,而不是排除整个单词/字符串。我怀疑-被视为断字。。。有什么想法吗 /(?!#SN-)([A-Z]+[0-9]+)\b/

我正在寻找帮助,提出一个正则表达式,它将匹配票号字,任何数字后面的字符数,但不是以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特性,因此无法通过简单的模式捕获您想要的内容。但是,在替换上下文中,您可以使用函数作为替换参数和系统地尝试捕获不需要的零件的模式轻松处理此问题:

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