2

我写了一个函数来匹配.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
        }

我怎样才能使它匹配.filter()'sampleQuery'中的每一个并插入字符串?

4

1 回答 1

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 

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

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

给你

test.filter(&f) a.filter(&e)
于 2013-05-23T12:18:36.723 回答