[英]javascript regex match word not followed by pattern with text inbetween
文本:
id="word1 word2 word3/343/els/425/word4 word5 word6"
wordA wordB Bword2B word1 word2 word3
blah blah blah
我试图匹配整个单词:但文本中没有word1,word2,word3 ,但我不希望它们在文本的id="word1 word2 word3/343/els/425/word4 word5 word6"
行中id="word1 word2 word3/343/els/425/word4 word5 word6"
,这些词不是拉丁语。
当前方法:
var sWord = "word2";
text = text.replace( new RegExp(sWord+"(?!\/[0-9])", "gi"), "<span style='background-color: yellow'>"+sWord+"</span>");
这种方法仅适用于word3,不适用于word1或word2,因此如何在正则表达式中引入在NUMBER之前还有另一个单词的可能性?
"(?!.\/[0-9])"
我加了点“。” 到正则表达式。 但它似乎不起作用。
另外,如何增加整个单词匹配的可能性? \\ b和\\ S似乎不起作用,因为单词不在拉丁语中。
先感谢您!
编辑: jsfiddle http://jsfiddle.net/GLt4F/5/
如您所见,word1和word2的按钮中断,但word3却没有,因为匹配正确
编辑2:
改写问题:如果不接BBB,则仅匹配AAA,并且两者之间可以是任何东西。 例如:
AAA frefe BBB不应该匹配
AAA BBB不应该匹配
AAA frefe cc应该匹配
/AAA([\s\S](?!=BBB))*$/
应该这样做。
另外,如何增加整个单词匹配的可能性? \\ b和\\ S似乎不起作用,因为单词不在拉丁语中。
JavaScript没有unicode兼容模式,因此您必须为char单词编写自己的字符集并使用否定匹配,因此
(?:^|[^A-Za-z0-9_$])
在AAA之前,并且在JS中没有后退,因此先前的非单词char将成为捕获的组0的一部分。
(?!(.*)\/[0-9])
这似乎可以解决问题(因为介于两者之间时不匹配。不知道是否存在漏洞,或者这是否是一个可靠的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.