正则表达式字面量模式与字符串模式
2017-07-24 06:00:00
# fontend
创建正则表达式
字面量模式
js
中通过 RegExp
类型来支持正则表达式,使用以下方法就可以创建一个正则表达式:
var expression = / pattern / flags;
每个表达式可带一个或多个 flags
,用以表明正则表达式的行为。其匹配模式支持一下三种 flags
:
g: 表示全局模式,将被应用于所有字符串,而并不是在第一个匹配项立即结束
i: 表示不区分大小写
m: 表示多行(multiline)模式
RegExp 构造函数模式
通过实例化 RegExp 构造函数对象,这里多说一句,在ECMAScript 3 中正则表达式字面量始终是共用一个 RegExp 实例,而构造函数创建每次则会创建一个新的实例化对象,但是在 ECMAScript 5 中已经明确规定,字面量创建正则表达式必须每次都像直接调用 RegExp 对象那样,各浏览器厂商都对此作出了修改。
通过此模式创建正则表达式,传入参数为字符串:
1 | // 正则表达式字面量模式 |
以上通过两种方式创建的同一含义的正则表达式,其 source 属性返回的都是正则表达式的字符串表示,值得注意的是返回的事按照字面量形式的字符串模式,而并不是你传入构造函数中的字符串模式,这里或许会有很多人搞混,直接把这个当成传入构造函数的字符串模式,然后进行一系列操作,然后可能就会一脸懵逼,怀疑智商。。。。。
传入构造函数中的字符串模式并不是正则表达式直接去外面的斜线,因为字符串模式中是需要双反斜杠 \ 来代替一个反斜杠 \ 的作用.
对比
两者相比而言,字面量模式显然更简洁更方便。有一点小差别就是采用字面量的写法,正则对象在代码载入时(即编译时)生成;采用构造函数的方法,正则对象在代码运行时生成。通常都会直接使用字面量形式创建,除非你的正则表达式需要在运行中才能生成,那就需要通过穿字符串的方式创建了。