0

str = "[A-z]\Z"; \Z は JavaScript 正規表現ではサポートされていないため、\Z を $ に置き換えたい正規表現を表す文字列があります。

これを行う方法はありますか?\Z の正規表現を作成していくつかの文字列置換を試みましたが、期待どおりに動作しません。また、Z の任意の発生に対しても機能します。これを達成する方法はありますか? これが問題のある私のサンプルコードです

var expression = "[abczZ]\Z";
var regEx = new RegExp("\\Z", "g"); 
a=  expression.replace(regEx, "\\s");
alert(a);
4

1 に答える 1

4

エスケープの追加レイヤーが 1 つ必要です。

var regEx = new RegExp("\\\\Z", "g");

正規表現を文字列として与えるため、文字列によって 1 つのエスケープ層が「食べられ」\Z、リテラルに一致する正規表現のみが保持されるためZです。

正規表現リテラルを使用することもできます。その場合、二重エスケープする必要はありません。

var regEx = /\\Z/g;

もちろん、文字列でテストするには、まず文字列を修正する必要があります。現状では、バックスラッシュはまったく含まれていません。バックスラッシュをエスケープしなかったため、文字列が含まれるvar expression = "[abczZ]\Z"ことになります。最初の 2 つの段落で説明したのとまったく同じ問題です。expression"[abczZ]Z"

JS コンソールで試してみてください。

> "[abczZ]\Z"
"[abczZ]Z"
> "[abczZ]\\Z"
"[abczZ]\Z"
> "[abczZ]\Z".replace(new RegExp("\\\\Z", "g"), "$")
"[abczZ]Z"
> "[abczZ]\\Z".replace(new RegExp("\\\\Z", "g"), "$")
"[abczZ]$"
于 2013-01-25T13:09:48.270 に答える