如何在使用JavaScript正则表达式之前匹配包含两个相同单词的字符串中的单词?

时间:2017-02-28 12:34:45

标签: javascript regex

例如:" foo foo bar word ",它将匹配单词:" bar ",因为"的"有两个相同的单词" foo "领先吧。 似乎javascript正则表达式不支持零宽度正向后看方法。那么我怎样才能找到一种替代方法来解决这个问题。

2 个答案:

答案 0 :(得分:1)

这是一个简单的可能解决方案。

//get an array of words.
var words = string.split(' ');

//loop  through the words
for(var i = 2; i < words.length; i++){
   //lets skip the first 2 words.
   if(words[i-1] === words[i-2]){
     //the last 2 words are equal.
     //your match is here.
   }
}

您还可以跟踪lastWord变量并检查它以减少数组查找。但我认为这通常被认为是一种比正则表达式更容易阅读的解决方案,但更不如此,记忆明智。

答案 1 :(得分:0)

您可以使用正则表达式back reference并使用regex.exec()获取结果。

describe('back reference', () => {
   it('matching with regex.exec()', () => {
    let source = `foo foo bar word ooh ooh ooh yes`;

    let regex = /(\w+)(?:\W+\1)+\W+(\w+)/g;

    expect(regex.exec(source)[2]).toEqual('bar');
    expect(regex.exec(source)[2]).toEqual('yes');
    expect(regex.exec(source)).toBeNull();
  });
});