为什么/} /是javascript中的有效正则表达式?

时间:2012-10-18 10:46:45

标签: javascript regex

/}/是JS中的有效正则表达式:

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

但是,the ECMA standard似乎不允许:

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

为什么以上工作?这项功能是否得到普遍支持?是否记录在哪里?

2 个答案:

答案 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不是例外。