繁体   English   中英

javascript正则表达式不匹配单词,后跟带有中间文本的模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM