/}/
JSで有効な正規表現です。
alert('}}}'.replace(/}/g, "!"))
ただし、ECMA標準ではそれが許可されていないようです。
PatternCharacter ::SourceCharacter but not any of:
^ $ \ . * + ? ( ) [ ] { } |
上記が機能するのはなぜですか?この機能は普遍的にサポートされていますか?それはどこかに文書化されていますか?
/}/
JSで有効な正規表現です。
alert('}}}'.replace(/}/g, "!"))
ただし、ECMA標準ではそれが許可されていないようです。
PatternCharacter ::SourceCharacter but not any of:
^ $ \ . * + ? ( ) [ ] { } |
上記が機能するのはなぜですか?この機能は普遍的にサポートされていますか?それはどこかに文書化されていますか?
小さな修正:これらはRegExp
esであり、純粋な正規表現とは異なります。
上記が機能するのはなぜですか?
使用しているJS実装は、ES5標準に厳密に準拠していないため、。を上げる必要があると規定されていSyntaxError
ます。ベルギがコメントしたように、これは$15.10.4.1で説明されています。
この機能は普遍的にサポートされていますか?
いいえ。標準に含まれていない場合は、普遍的にサポートされていると見なしてはなりません。
それはどこかに文書化されていますか?
おそらくそうではありませんが、それは未定義の動作のアーティファクトにすぎません。テストしたJSエンジンのドキュメントを参照してください。
http://www.regular-expressions.info/characters.html:
ほとんどの正規表現フレーバーは、中括弧{をリテラル文字として扱います。ただし、それが{1,3}のような繰り返し演算子の一部である場合を除きます。したがって、必要に応じてエスケープすることはできますが、通常はバックスラッシュでエスケープする必要はありません。この規則の例外は、 java.util.regexパッケージです。これには、すべてのリテラル中括弧をエスケープする必要があります。
javascriptも例外ではないようです。