3

はコメント/(regex here)/であるため、空の正規表現を構文と一致させることができないことに気付きました。//

'this is a test'.match(//)
> SyntaxError: Unexpected token }

だから、私は試しnew RegExp('')てみましたが、うまくいきました:

'this is a test'.match(new RegExp(''))
> [""]

しかし、出力を確認したところnew RegExp('')、次のようになりました。

new RegExp('')
> /(?:)/

どうしてこれなの?(私は Chrome バージョン26.0.1410.64 (Official Build 193017) mを使用しており、これは JavaScript コンソールにあります)

4

1 に答える 1

3

これは、セクション7.8.5の ECMA 標準で指定されています。

正規表現リテラルは空にできません。空の正規表現リテラルを表す代わりに、文字 // は 1 行のコメントを開始します。空の正規表現を指定するには、/(?:)/ を使用します。

また、15.10.4.1の仕様には次のように記載されています。

P が空の文字列の場合、S を "(?:)" にすることでこの仕様を満たすことができます。

于 2013-05-17T01:39:38.197 に答える