0
<div class="text">[abc] [abc]</div>
<div class="text">foo</div>
<div class="text">bar</div>

jQuery:

var match = '[abc]';
$('div.text:contains(' + match + ')').each(function () {
    $(this).text($(this).text().replace(match, 'xyz'));
});

jsFiddle: http://jsfiddle.net/WM6wG/6/

現在、これは機能しますが、[abc] の追加インスタンスには一致しないようです。このインスタンスでは正規表現グローバルを使用するように言われましたが、使用new RegExp(match, 'g');すると、各インスタンスではなく各文字に対して繰り返されます[abc]

[abc]のすべてのインスタンスが に変わるようにこれを調整するにはどうすればよいxyzですか?

4

2 に答える 2

2

アプローチを使用しRegExpて(使用できるようにg)、文字列を に変更します'\\[abc\\]'

[]は正規表現の特殊文字であるため、エスケープする必要があります。(文字列リテラルのバックスラッシュもエスケープする必要があることに注意してください。)

new RegExp(...)次のように、 の代わりに正規表現リテラルを使用することもできます/\[abc\]/g

于 2013-03-01T00:20:42.627 に答える
1

\\正規表現を文字列として作成するときは、特殊文字をダブルエスケープする必要があります。このソリューションを使用するか、単にリテラル正規表現を使用できます。

$(this).text().replace(/\[abc\]/g, 'xyz')
于 2013-03-01T00:21:17.953 に答える