js正则表达式的定义方式
hi各位父老乡亲,こんにちはKaiqisanすうう,是一个会经常口胡的标准普通话玩家。今天来讲讲正则表达式的创建方式,能帮你更加深层地理解正则表达式,以及更加灵活地使用它。
它一共有两种方法,一种使用实例创建的方式new一个表达式,另外一种是直接定义。
let demo = /\s+/g // 直接创建法
let demo2 = new RegExp("\\s+", "g") // 实例创建,第一个参数为匹配规则,第二个为检索条件
// 上面两种方法创建之后是表示同一种匹配规则的,都是奔着检测空格去的
注意事项
- 使用实例创建的表达式会对表达式内容进行一次转译才会最终生成表达式正文。它有一个转译规则,那就是会去检测反斜杠
\
,举个例子,如果正则表达式想要匹配制表符\t
的话,在使用实例创建中,就必须写\\t
,因为它会转译,把\\
转译为\
,然后再与t
拼接,最终形成\t
,如果您使用实例去生成一个正则表达式的时候,表达式过于复杂,您可以查看表达式的source
属性来校验自己最终的表达式正文。 - 直接创建法需要在表达式正文两端添加斜杠,这是为了把正则表达式与其他参数区分开来,就像是
9
: 它不裹上引号就是数字类型(Number),裹上引号就是字符串类型(String)。 - 使用实例创建的表达式可以进行字符串拼接。这也意味着可以对表达式进行动态修改,可以由参数来影响表达式的形成,如果您硬是要使用直接创建法的话,也…其实不是不可以,只不过稍微麻烦一点就是了。
/* -- 实例创建法的动态拼接 -- */
let flag = true
let demo = new RegExp('\\s+' + flag ? 'app' : 'soft', 'g') // 实例创建
let str = ' app'
console.log(demo.test(str)); // true
/* -- 直接创建法的动态拼接 -- */
let flag = 'app'
eval("var demo = /\\s+" + flag + "/g") // 这里使用双斜杠是因为eval函数也会转译反斜杠
// 上面的语句等同于 var demo = /\s+app/g
// eval方法计算里面的字符串,转化为可执行的代码,但它不安全,内部代码也不支持es6语法所以使用得很少
let str = ' app'
console.log(demo.test(str)) // true
总结
如果您要使用字符串拼接表达式的话,建议使用实例创建法,既方便,又实惠,还管饱(不是)。
正则表达式的所有内容就到这里结束了!在大家以后的使用中,还有一个比较重要的点需要大家注意,那就是怎么方便怎么来,正则表达式虽然厉害,但是可读性并不强,在项目实战中,咱写的代码是要给别人看的,如果别人看到这一长串的正则表达式,一定会感到头大,所以,写注释也是很重要的!还有一点,如果通过直接校验就可以解决的问题,就可以不要劳烦正则表达式了。