/}/
是JS中的有效正则表达式:
alert('}}}'.replace(/}/g, "!"))
但是,the ECMA standard似乎不允许:
PatternCharacter ::SourceCharacter but not any of:
^ $ \ . * + ? ( ) [ ] { } |
为什么以上工作?这项功能是否得到普遍支持?是否记录在哪里?
答案 0 :(得分:3)
小修正:这些是RegExp
es,与纯正则表达式不同。
为什么上述工作?
因为您使用的JS实现并不严格符合ES5标准,该标准规定它应该引发SyntaxError
。正如Bergi评论的那样,这在$15.10.4.1中有描述。
是否普遍支持此功能?
没有。如果它不在标准范围内,则永远不应被视为普遍支持。
是否记录在任何地方?
可能不是,它只是一个未定义行为的工件。查看您测试的任何JS引擎的文档。
答案 1 :(得分:1)
http://www.regular-expressions.info/characters.html:
大多数正则表达式都会将大括号 {视为文字 字符,除非它是重复运算符的一部分,如 {1,3} 。所以 你通常不需要用反斜杠来逃避它 如果你愿意,可以这样做。这条规则的一个例外是 java.util.regex包:它需要转义所有文字大括号。
似乎javascript不是例外。