JavaScript中正则表达式-字面量VS构造函数

一直没有系统总结过字面量与构造函数在声明正则中的区别,抽空总结下。

区别

  • 字面量中对于特殊字符都是直接解析,而在构造函数中需要加正斜杠进行转译, 比如\d会被当作字符串\d看待,但比如
  • 字面量前后正斜杠只是为了表示该值为正则,只是分割符,假如在构造函数中写就意味着匹配斜杠
  • 字面量表达式的易读性是高于构造函数

举例子

以下正则匹配等价

1
2
3
const value = 'rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077';
console.log(new RegExp('rt:([^@]+)@(\\d+)').exec(value));
console.log(/rt:([^@]+)@(\d+)/.exec(value));

如何选择

假如正则模式匹配,优先使用字面量,但正则模式是个变量需要利用上下文才可以确定,那么就应该使用构造函数。

延伸

字面量,变量

字面量与变量不同,比如a=1,那么a即是变量,但同时我们也可以说1是个字面量,因为从面上我们就可以看出值是多少。所以说字面量说的是值,而变量说的是参数,一个左边,一个右边。

写在最后

文本处理绕不开正则,所以需要留心总结。