- ベストアンサー
RegExp.prototype結果の/(?:)/
・ChromeコンソールでRegExp.prototypeすると「/(?:)/」と表示されるのですが、どういう意味でしょうか? ・「?」は直前文字の 0 回か 1 回の出現にマッチ と書いてあったのですが、「:」が分かりません ・「?:」でどういう意味になるのでしょうか ・「()」はキャプチャ?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
他の型が回答されている用に「(?:)」で1つです。何にもマッチしない空の正規表現と等価です。 RegExp.prototypeはES5.1では空のRegExpオブジェクトということになっています。 ""+RegExp() // "/(?:)/" で分かるように、空のRegExpオブジェクトはRegExp.prototype.toStringを通して結局"/(?:)/"になります。 これはtoString()された時、ちゃんとした正規表現リテラルになったほうが望ましいだろうということからです。 もし"//"だとコメントの用になってしまいます。 因みにChrome等で、/\//が"///"と表示されるのは誤りです。Firefoxの用に"/\//"か、"/\u002F/"を返さないといけません また、ES6ではRegExp.prototypeは通常のオブジェクトなので、RegExp.prototype.toString()は今のところエラーです。 ここで問題提起がされています http://esdiscuss.org/topic/standard-builtins-prototypes-and-tostring 要するに、このあたりは微妙な問題を抱えている部分ということです。 そんなに気にしないでいいでしょう。
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
とりあえず標準的な解説は以下に… http://t32k.me/mol/log/pattern-matching-with-regular/ (?:...) は非記憶のグループかと prototypeなので何でもOKのような気がしますが、なぜそうなっているのかはどなたか詳しい方の回答をお待ちします。
お礼
回答ありがとうございました。 ・リンク先大変参考になりましたー
お礼
回答ありがとうございました。 >何にもマッチしない空の正規表現と等価 >toString()された時、ちゃんとした正規表現リテラルになったほうが望ましい ・説明大変わかりやすかったです ・リンク先ページ初めて見ましたが、ES仕様について(?)、色々議論されているんですねー