我正在尝试在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);

09-25 17:22