0

文本:

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 的按钮中断,因为匹配正确

编辑2:

重新表述问题:仅在 BBB 之后不匹配 AAA 并且它们之间可以是任何东西。例如:

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

4

2 回答 2

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

应该这样做。

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

JavaScript 没有 unicode 兼容模式,所以你必须为一个单词 char 编写自己的字符集并使用负匹配,所以

(?:^|[^A-Za-z0-9_$])

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

于 2013-01-02T14:31:08.837 回答
0
(?!(.*)\/[0-9])

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

于 2013-01-02T14:38:14.777 回答