5

/}/JSで有効な正規表現です。

alert('}}}'.replace(/}/g, "!"))

ただし、ECMA標準ではそれが許可されていないようです。

PatternCharacter ::SourceCharacter but not any of:
      ^ $ \ . * + ? ( ) [ ] { } |

上記が機能するのはなぜですか?この機能は普遍的にサポートされていますか?それはどこかに文書化されていますか?

4

2 に答える 2

3

小さな修正:これらはRegExpesであり、純粋な正規表現とは異なります。

上記が機能するのはなぜですか?

使用しているJS実装は、ES5標準に厳密に準拠していないため、。を上げる必要があると規定されていSyntaxErrorます。ベルギがコメントしたように、これは$15.10.4.1で説明されています。

この機能は普遍的にサポートされていますか?

いいえ。標準に含まれていない場合は、普遍的にサポートされていると見なしてはなりません。

それはどこかに文書化されていますか?

おそらくそうではありませんが、それは未定義の動作のアーティファクトにすぎません。テストしたJSエンジンのドキュメントを参照してください。

于 2012-10-18T10:56:18.947 に答える
1

http://www.regular-expressions.info/characters.html

ほとんどの正規表現フレーバーは、中括弧{をリテラル文字として扱います。ただし、それが{1,3}のような繰り返し演算子の一部である場合を除きます。したがって、必要に応じてエスケープすることはできますが、通常はバックスラッシュでエスケープする必要はありません。この規則の例外は、 java.util.regexパッケージです。これには、すべてのリテラル中括弧をエスケープする必要があります

javascriptも例外ではないようです。

于 2012-10-18T11:03:42.623 に答える