正则表达式有两种定义方式,一种是使用双正斜杠将正则表达式的式子括起来,例如 var re1 = /^d$/ ;一种是使用创建正则表达式对象的方式,这种情况下正则表达式作为一个字符串,用双引号包裹,例如 var re1 = new RegExp(“^\d$”)。从这两种示例中可以看出虽然表达同样的意思,但是使用的正则表达式却有一些区别,区别之处就在反斜杠的使用。
反斜杠代表转义字符,用在所有字符串中,正则表达式作为一种超级字符串,和字符串一样遵循转义字符的条件,点在正则表达式中代表任意字符的匹配,以点为例讨论反斜杠在正则表达式中定义时的使用。
在第一种定义方式中,讨论 /23\.34/ 和 /23.34/ 的区别,代码如下。结论:在这种定义方式下不能用双反斜杠,否则会将转义字符转义为一个普通字符反斜杠。
在第二种定义方式中,讨论 new RegExp("23.34") 、new RegExp("23.34") 和 new RegExp("23\.34")的区别,代码如下。结论:在这种定义方式下由于是将正则表达式放在字符串中,因此若想让点成为一个普通点,因此需要使用双反斜杠。
核心之处在于反斜杠适用在所有字符串中,正则表达式作为超级字符串同样适用,而在进行匹配、测试等情况时,免不了要同时使用正则表达式和字符串,要注意理清自己的思路。