我正在尝试在javascript中使用正则表达式,以在包含3个不同单词的字符串中找到一个部分。到目前为止,这是我的表达方式:
regEx = str.match(/(?=(\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b))/gi);
这将返回6个空匹配项。但是,我知道它与单词匹配,因为当我使用.exec时,我可以在第一次匹配中获得所有组。但是如何获得每场比赛的第一组?
最佳答案
您可以使用以下代码获取每个匹配项中的第一个子匹配项:
var re = /(?=(\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b))/gi;
var str = 'gg word1 something word2 some word3 ggg';
var res= []; // Array for the results
while ((m = re.exec(str)) !== null) { // Loop through matches
if (m.index === re.lastIndex) { // if we have a zero-length match
re.lastIndex++; // advance the regex index manually
}
res.push(m[1]); // Add a value to the resulting array
}
document.body.innerHTML = JSON.stringify(res, 0, 4);