在javascript中的正则表达式的每个匹配中返回第一个捕获的组?

时间:2016-02-04 15:43:03

标签: javascript regex

我正在尝试在javascript中使用正则表达式,它将在字符串中找到包含3个不同单词的部分。这是我到目前为止的表达方式:

regEx = str.match(/(?=(\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b(.+?)\b(word1|word2|word3)\b))/gi);

这将返回6个空匹配。但是,我知道它与单词相匹配,因为当我使用.exec时,我可以在第一场比赛中获得所有组。但是如何让它在每场比赛中返回第一组?

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码获取每个匹配中的第一个子匹配:



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