2

クエリの句に一致する関数を作成しました.filter()が、この関数は単語に 1 回だけ一致し、その後は一致しません。

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 に答える