如何使用正则表达式匹配字符串中的单词并在每个匹配项上执行特定任务

时间:2013-05-23 12:17:48

标签: javascript regex

我有一个函数与我的查询中的.filter()子句匹配,但是这个函数只匹配一次这个单词,然后不再匹配进一步出现。

function insertStringInQuery(sampleQuery, stringToInsert)
        {
            var matchFilter = sampleQuery.match(/\.filter\((.*?)\)/);
            console.log('matchFilter',matchFilter)
            var stringToInsert = stringToInsert+"&";
            var sliceIndex = matchFilter.index+8;
            var finalQueryVal = sampleQuery.slice(0, sliceIndex) + 
                    stringToInsert +
                    sampleQuery.slice(sliceIndex, sampleQuery.len);
            return finalQueryVal
        }

如何使其匹配'sampleQuery'中的每个.filter()并插入字符串?

1 个答案:

答案 0 :(得分:2)

您需要添加g标志才能获得多个结果:

var matchFilter = sampleQuery.match(/\.filter\((.*?)\)/g);

这为您提供了一个可以轻松迭代的字符串数组。

例如

"test.filter(f) a.filter(e)".match(/\.filter\((.*?)\)/g)

给你

[".filter(f)", ".filter(e)"]

现在,假设您想获得子匹配。最简单的解决方案是使用exec:

var str = "test.filter(f) a.filter(e)";
var regex = /\.filter\((.*?)\)/g, m;
while (m=regex.exec(str)){
  console.log(m[0], m[1]) 
}

记录

.filter(f) f
.filter(e) e 

如果你想要的只是在子匹配开头添加&,你可以使用替换:

"test.filter(f) a.filter(e)".replace(/(\.filter\()(.*?)\)/g, "$1&$2)")

给你

test.filter(&f) a.filter(&e)