javascript正则表达式匹配单词之后没有跟随文本的模式

时间:2013-01-02 11:21:17

标签: javascript regex

文本:

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"行匹配,单词不是拉丁语。

目前的做法:

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没有,因为匹配是正确的

EDIT2:

重新解决问题:如果没有BBB,则仅匹配AAA,它们之间可以是任何东西。例如:

AAA frefe BBB不应该匹配
AAA BBB不应该匹配
应该匹配AAA frefe cc

2 个答案:

答案 0 :(得分:3)

/AAA([\s\S](?!=BBB))*$/

应该这样做。

  

另外,如何添加全字匹配的可能性? \ b和\ S似乎不起作用,因为单词不是拉丁语。

JavaScript没有unicode兼容模式,因此您必须为单词char编写自己的字符集并使用否定匹配,所以

(?:^|[^A-Za-z0-9_$])
在AAA之前的

,并且JS中没有lookbehind,因此之前的非单词char将成为捕获的组0的一部分。

答案 1 :(得分:0)

(?!(.*)\/[0-9])

这似乎可以解决问题(因为当两者之间没有匹配时。不知道是否存在漏洞或者它是否是一个可靠的答案。