これが何を意味するのか理解するのに苦労しています:/[\[]/ なぜ 2 つの replace ステートメントがあるのですか?
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
これが何を意味するのか理解するのに苦労しています:/[\[]/ なぜ 2 つの replace ステートメントがあるのですか?
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
/[\[]/正規表現リテラルです。
[最初の置換では、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, "\\]");
つまり、正規表現を使用しています。正規表現に慣れていない場合は、最初に正規表現を学習することをお勧めします。
これは実際には Javascript に固有のものではありません。正規表現はほとんどのプログラミング言語で使用されていますが、わずかな違いがあります。正規表現を調べてみてください。知っておくと非常に便利です!
たぶん、例でどのように機能するかがわかります
var name = "[[[[[]]]]]]]";
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
console.log(name);
その結果、あなたは
\[[[[[\]]]]]]]
この正規表現は、最初に出現し[た to\[と最初に出現]したto を置き換えます\]