Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript正则表达式匹配字符串中的一个单词,该字符串前面有两个相同的单词?_Javascript_Regex - Fatal编程技术网

如何使用JavaScript正则表达式匹配字符串中的一个单词,该字符串前面有两个相同的单词?

如何使用JavaScript正则表达式匹配字符串中的一个单词,该字符串前面有两个相同的单词?,javascript,regex,Javascript,Regex,例如:“foo-foo-bar-word”,它将匹配单词:“bar”,因为“bar”前面有两个相同的单词“foo”。 javascript正则表达式似乎不支持零宽度正查找方法。那么我该如何找到解决这个问题的替代方法呢。这里有一个简单可行的解决方案 //get an array of words. var words = string.split(' '); //loop through the words for(var i = 2; i < words.length; i++){

例如:“foo-foo-bar-word”,它将匹配单词:“bar”,因为“bar”前面有两个相同的单词“foo”。
javascript正则表达式似乎不支持零宽度正查找方法。那么我该如何找到解决这个问题的替代方法呢。

这里有一个简单可行的解决方案

//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.
   }
}
//获取一个单词数组。
var words=string.split(“”);
//循环读单词
for(变量i=2;i
您还可以跟踪lastWord变量,并对照它进行检查,以减少数组查找。但我认为这通常被认为是一个比正则表达式更容易阅读的解决方案,但在内存方面就不那么容易了。

您可以使用正则表达式并使用它来获得结果

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();
  });
});

您可以执行类似于
\b(\w+)\1(\w+)
的操作,这将捕获组2中的“bar”。您不需要任何积极的查找<代码>/(\w+)\w+\1\w+(\w+)/
足够了,然后获取组2的值。