需要一个javascript正则表达式来匹配单词之前和之后没有不同的单词

时间:2017-08-08 21:06:13

标签: javascript regex

我试图匹配完整的单词“和”除了它出现在成语之前和之后重复相同的单词,如“越来越多”或“一次又一次”。我有这个:

/(\b\w*\b)\s\band\s(?!\1)/gi

哪个有效,除了它还在“和”之前捕获了这个词。我明白你不能在JS中做一个lookbehind正则表达式...任何帮助赞赏!

示例: 它应该匹配加上,但不会越来越多或更少。

2 个答案:

答案 0 :(得分:0)

您是否可以测试相反的情况,测试匹配对的存在并否定结果?

/(\b\w+\b)\s\band\s(\1)/gi

我在https://regex101.com/r/ZqXbtL/1/tests做了一些关于此的快速测试,它给了我预期的否定结果。

答案 1 :(得分:0)

我认为最好获取匹配项的索引并添加单词的长度和后面的空格来获取“和”的索引,因此你可以使用子字符串或类似的东西,我知道它不是你想要的确切的东西,但也许它有帮助。

下面的代码段将获得第二个“和”

的索引

编辑:从this answer获得帮助

var reg = /(\b\w*\b)\s(?=\band\s(?!\1))/g;
var match,indexes = [];
while(match = reg.exec(document.body.innerHTML)){
     indexes.push(match.index + match[0].length);
}

// testing
indexes.forEach(function(element){
    document.body.innerHTML += "<br>\"" +  
    document.body.innerHTML.substr(element,3) + "\" found at  " + element;
});
            
test and test<br>
test and not