私は Douglas Crockford の Web ページJavaScript: The World's Most Misunderstood Programming Languageを読んでいて、Design Errors の下で彼が「リテラル正規表現の表記法」に言及していることに気付かずにはいられませんでした。彼は正確に何について話しているのですか?JavaScript の正規表現の表記法の問題点とその理由は?
4 に答える
文字をエスケープする必要があるという事実に関係している可能性があります/
。おそらく、彼はよりユニークな文字を記法として使用したかったのでしょう。
/test//
は無効/test\//
ですが、 は有効な正規表現です。
一部の言語では、文字列で実際に表示文字を指定できます。たとえば、次のようになります。
$regex = '#test/#';
#
記号が意味を表す場所。
正規表現のリテラル表記は、言語仕様から切り離された正規表現エンジンを進化させる上で障害になっていると想像できます。
すべての正規表現が文字列である場合、それらは言語レベルで常に有効であり、正規表現エンジンはそれらをより自由に解釈できます。
しかし、それは単なる推測です。クロックフォードが彼の発言で何を意味していたのか、私にはわかりません。
個人的には、正規表現リテラルがかなり役立つと思います。正規表現のエスケープとnew RegExp(pattern, flags)
文字列のエスケープの両方の規則に従う必要があるため、代わりの方法よりもはるかに冗長ではありません ( 、誰か?)。動的な正規表現を扱う以外に、この表記法の大きな利点はわかりません。"Path\\\\with\\\\backslashes"
彼は、セミコロンの挿入が間違いであるという意味について、あまり明確ではありません。おそらく、彼はステートメント区切り文字としてのセミコロンを意味しています。もしそうなら、私は同意しません。セミコロンがないと、コードの難読化/縮小化はコードで実行されません。