我有一个函数与我的查询中的.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()
并插入字符串?
答案 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)