3

これが何を意味するのか理解するのに苦労しています:/[\[]/ なぜ 2 つの replace ステートメントがあるのですか?

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

4 に答える 4

8

/[\[]/正規表現リテラルです。

[最初の置換では、2 番目のby\[と symmetric を置き換えています。

多くの(ほとんど役に立たない)エスケープメントのために奇妙に見えます :[は正規表現で\エスケープ[され、文字列リテラルでエスケープされます。

最初の正規表現は次のように分析できます。

  • /: 正規表現の開始
  • [: 文字セットのオープニング
  • \[:[文字 (セット内にあるため役に立たないエスケープ付き)
  • ]: 文字セットの終了
  • /: 正規表現の終了

これらの正規表現は私には冗長に見えます。そのセットに文字が 1 つしかない場合、文字セットは必要ありません。[また、文字列リテラルでエスケープする必要はありません。

あなたはできたかもしれません

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

例えば

 'a [ b c ] d [ e ]'.replace(/\[/, "\\[").replace(/\]/, "\\]")

与える

 "a \[ b c \] d [ e ]"

g修飾子がないため、 への呼び出しごとに 1 つの置換しか行っていないことに注意してください。replaceこれはおそらく目標ではないため、

 name = name.replace(/\[/g, "\\[").replace(/\]/g, "\\]");
于 2013-06-07T20:27:17.967 に答える
0

つまり、正規表現を使用しています。正規表現に慣れていない場合は、最初に正規表現を学習することをお勧めします。

于 2013-06-07T20:27:23.970 に答える
0

これは実際には Javascript に固有のものではありません。正規表現はほとんどのプログラミング言語で使用されていますが、わずかな違いがあります。正規表現を調べてみてください。知っておくと非常に便利です!

于 2013-06-07T20:29:28.303 に答える
0

たぶん、例でどのように機能するかがわかります

var name = "[[[[[]]]]]]]";
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
console.log(name);

その結果、あなたは

\[[[[[\]]]]]]] 

この正規表現は、最初に出現し[た to\[と最初に出現]したto を置き換えます\]

于 2013-06-07T20:39:09.080 に答える