0

ユーザーがいつでも編集できる文字列と、文字列に対して実行されている正規表現を使用して、それをxmlに追加して保存しますが、文字列に「$ 1」を追加できます。テキスト「$1」を保存したいだけですが、$1 が含まれている同じ文字列に対して正規表現を実行する必要があります。毎回 $1 を正規表現の文字に置き換えます。

この文字列の $1 を見つけて置き換えるにはどうすればよいですか?

何が起こっているかの例:

string1 = '<item id="1">i have $100</item>'

regexp = new RegExp('<item id="1"([^<]|<[^\/]|<\/[^i]|<\/i[^t]|<\/it[^e]|<\/ite[^m]|<\/item[^>])*<\/item>');

data = '<data><item id="1">i have no money</item><item id="2">i have no money</item></data>'

data = data.replace(regexp, string1);

結果

<data><item id="1">i have >00</item><item id="2">i have no money</item></data>
4

3 に答える 3

6

呼び出しに入れたい可変文字列があり、その中に が含まれreplace()ている可能性がある場合、 を に置き換えることで、 が後方参照として扱われるのを$N防ぐことができます。どうやら、JS 正規表現の他の特殊文字とは異なり、文字は a でエスケープできません- 前に (go figure) を付けてエスケープする必要があります。$N$$$$\$

あなたの例では、次のようにして問題を解決できます。

data = data.replace(regexp, string1.replace('$', '$$$'));

これにより、 any$$$inに変わりstring1、後方参照として扱われなくなります。

(注:ここでこの小さなナゲットを見つけました)

于 2014-03-24T14:27:38.790 に答える
3

これは、正規表現にキャプチャ グループがある場合にのみ発生します。

グループにキャプチャさせたくない場合?:は、グループの先頭に配置します。

/foo(?:bar)/
于 2012-06-12T21:40:30.453 に答える
-1

をエスケープできます$。例えば:

var replacement = '<item id="1">i have \\$100</item>';

キャプチャ グループがあり、$.

于 2012-06-12T22:00:52.220 に答える