9

JSLintが次のJavaScript行に「Badescapement」を返すのはなぜですか?

param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

JSLintのドキュメントから、正規表現リテラルの前に括弧が付いているので、これで問題ないと思いました。

正規表現は、簡潔でわかりにくい表記で記述されています。JSLintは、移植性の問題を引き起こす可能性のある問題を探します。また、明示的なエスケープメントを推奨することにより、視覚的なあいまいさを解決しようとします。

正規表現リテラルのJavaScriptの構文は、/文字をオーバーロードします。あいまいさを避けるために、JSLintは、正規表現リテラルの前にある文字が(または=または:または、文字であると想定しています。

4

1 に答える 1

13

不平を言っているのは正規表現ではありません。エスケープする必要のない置換文字列の文字をエスケープしています。

[および]文字は、通常の文字列では特別な意味はありません。エスケープする必要はありません。

param = param.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");

注:Anonが指摘したように、単一の文字に文字セットを使用する必要はありません。

param = param.replace(/\[/,"\\[").replace(/\]/,"\\]");

また、単一の正規表現で両方の文字を一致させ、一致したものをキャッチして置換に使用することもできます。最初のオカレンスよりも多くを置き換える場合は、グローバルオプションを使用します。

param = param.replace(/(\[|\])/g,"\\$1");
于 2010-02-26T00:11:50.463 に答える