[英]Regex to exclude words beginning with hash tag
我正在寻找帮助,以找出一个正则表达式,该表达式将与票证号码单词(任意数量的字符后跟数字)匹配,但不匹配以#SN-
开头的单词。 有任何想法吗?
示例字符串:
A string with has ref like #SN-INC0000058 and simple mention like INC0000059.
正则表达式匹配项: INC0000059
我目前停留在此细分,该匹配与“#SN-”之后的数字匹配,而不是排除整个单词/字符串。 我怀疑-被视为断字...任何想法?
/(?!#SN-)([A-Z]+[0-9]+)\b/g
由于Javascript正则表达式没有后向功能,因此无法通过简单的模式捕获所需内容。 但是,在替换上下文中,您可以使用函数作为替换参数和一种模式来系统地尝试捕获不需要的零件,从而轻松地处理此问题:
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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.