1

],[置換したい文字列が複数回出現する文字列を持っています]@[

どう頑張っても正解にたどり着けません。

    var find = '],[';
    var regex = new RegExp(find, "g");
    mytext.replace(regex, ']@[')

動作しません

   mytext = mytext.replace(/],[/g,']@[');

動作しません

私が間違っているところはありますか?

4

5 に答える 5

2

答えは、[ と ] は正規表現のコンテキストでは特殊文字であり、 \ を使用してエスケープする必要があります。以下のコード:

var regex= /\],\[/g
var result = mytext.replace(regex, ']@[') 

次の jsFiddle をチェックしてください: http://jsfiddle.net/JspRR/4/

ご覧のとおり、重要な部分は、正規表現を作成するときに ] と [ をエスケープすることです。

Javascript 正規表現の短縮形を使用したくない場合でも、同じエスケープが必要です。ただし、その場合、\ 文字自体をエスケープする必要があります ( ... 単独で!)

var regex = new RegExp("\\],\\[", "g");
var result = mytext.replace(regex, ']@[') 
于 2012-11-29T15:19:50.317 に答える
1

これを試して:-

 mytext.replace(/\],\[/g, ']@[')
于 2012-11-29T15:20:07.213 に答える
1

あなたの例が機能しない理由は、通常、角括弧は文字クラスを表すため、そのようにエスケープする必要があるためです

var find = '\\],\\[';
var regex = new RegExp(find, "g");
mytext.replace(regex, ']@[')

正規表現リテラルも使用できます

mytext.replace(/\],\[/g, "]@[");
于 2012-11-29T15:16:59.870 に答える
1

角括弧は、正規表現内の特殊文字です。文字セットを定義するために使用されます。

正規表現で角括弧を一致させたい場合は、バックスラッシュを使用してエスケープする必要があります。

"[1],[2],[3]".replace(/\],\[/g, "]@[");

または、組み込みのコンストラクターを使用する場合:

"[1],[2],[3]".replace(new RegExp("\\],\\[", "g"), "]@[");

どちらの場合もg、正規表現が検索された文字列のすべての出現に一致できるように、フラグを使用する必要があります。

var str = "[1],[2],[3]";

console.log(str.replace(/\],\[/g, "]@["));
console.log(str.replace(new RegExp("\\],\\[", "g"), "]@["));

于 2012-11-29T15:17:00.557 に答える
0
var str = "[1],[2],[3]";

var replaced = str.replace('],[', ']@[');
于 2012-11-29T15:16:53.567 に答える