如何使用JavaScript正则表达式匹配字符串中的一个单词,该字符串前面有两个相同的单词?
例如:“foo-foo-bar-word”,它将匹配单词:“bar”,因为“bar”前面有两个相同的单词“foo”。如何使用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++){
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的值。