javascript正则表达式将不带模式的单词与中间的文本进行匹配

javascript regex match word not followed by pattern with text inbetween

本文关键字:文本 中间 单词 正则表达式 模式 javascript      更新时间:2023-09-26

text:

id="word1 word2 word3/343/els/425/word4 word5 word6"
wordA wordB Bword2B word1 word2 word3
blah blah blah

我正在尝试匹配文本中的所有单词:单词1、单词2、单词3,但我不希望它们在文本的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似乎不起作用,因为单词不是拉丁语。

提前感谢!

编辑:jsfiddlehttp://jsfiddle.net/GLt4F/5/

正如你所看到的,单词1和单词2的按钮断开了,但单词3没有,因为匹配是正确的

第2版:

重新表述问题:只有在没有BBB的情况下才匹配AAA,它们之间可以是任何东西。例如:

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

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

应该这样做。

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

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

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

在AAA之前,并且JS中没有后备,所以之前的非单词字符将是捕获的组0的一部分。

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

这似乎起到了作用(在两者之间时不匹配。不知道是否存在漏洞或是否是可靠的答案。