JavaScript中的正则有几个不同于其他语言的地方

411 查看

来源:紫云飞的博客

我接触过不少语言,我很看重一门语言的正则表达式是否强大,还有正则与语法的结合是否紧密。在这一点上,JavaScript做的还不错,至少有正则字面量。当然,最强大的还是Perl。我最近发现,JavaScript中的正则在某些地方的表现和其他语言或工具中的正则有些不同,比较另类。虽然你几乎不可能写出也几乎用不到下面我讲的这些正则,但是了解一下毕竟是好的。本文中的代码示例都是在兼容ES5的JavaScript环境中执行的,也就是说,IE9之前版本,Fx4左右的版本等中的表现很有可能和我下面讲的不一样。

JavaScript中的正则有几个不同于其他语言的地方

1.空字符类

不包含任何字符的字符类[]称之为空字符类(empty char class),我相信你没听别人这么叫过,因为在其他语言中,这种写法是非法的,所有的文档和教程都不会讲一种非法的语法.下面我演示一下其他语言或工具都是怎么报这个错的:

而在JavaScript中,空字符类是合法的正则组成部分,不过它的效果是”永不匹配”,也就是匹配什么都会失败.相当于一个空否定正向环视(empty negative lookahead)(?!)的效果:

很显然,这种东西在JavaScript中没什么用.

2.否定空字符类

不包含任何字符的否定字符类[^]称之为否定空字符类(negative empty char class)或者叫空否定字符类(empty negative char class),都可以,因为这个名词是我”自创”的,和上面讲的空字符类类似,这种写法在其他语言中也是非法的: