正则表达式系列第一回--基本概念及正则对象

leap 2020-03-03

说起正则表达式,可以说是很多同行的痛点,包括我在内,看了会,会了忘,因此写一个系列的小教程,试图加深一下印象。

基本概念

所谓正则表达式,就是一个用于匹配符合某种规则的字符串的表达式。简单来说,就是我们用表达式的形式来创建一个规则,然后拿着这个规则去不同字符串里面进行匹配,看下有没有匹配上我们规则的字符串。

正则对象

要创建正则对象,有两种方法,一是字面量,二是构造函数

字面量形式,是我们平时最常用的,它简洁美观,大部分时间我们都在使用它,它的组成为 / 自定义规则 /gim ,首尾两个正斜杠,中间是一系列我们自己写的语法规则,末尾是修饰符。

const reg = /\d/g

在上面这个示例中,里面只创建了一个简单的规则,它由一个元字符\d组成,\d(即digital)代表一个数字。

修饰符只有三个,分别是g(global)全局匹配i(ignoreCase)忽略大小写匹配m(mutiple)多行匹配

字面量形式,一般我们吐槽它叫“转义再转义”,这种形式很少用到,它用构造函数去实例化一个正则对象,接收两个参数,第一个参数是正则文本,第二个参数是正则标志

其中,相比于字面量形式,正则文本不需要首尾两个正斜杠/作为规则边界,其次,正则文本里面的反斜杠需要再用反斜杠\转义一下。

const reg = new RegExp(‘\\d‘, ‘g‘)

这种形式看起来非常啰嗦,好像对比字面量形式它一无是处。

但是有一种情况是必须要用到构造函数形式来实例化正则对象的,那就是:当你需要传入变量的时候

const TIMES = 3;

const reg = new RegExp(`\\d{${TIMES}}`, ‘g‘); // 相当等于const reg = new RegExp(‘\\d{3}‘, ‘g‘)

这里我们需要用一个量词来修饰\d出现了几次,假设这个出现次数需要动态传入,不是写死的,就只能用构造函数形式,上面的例子中,采用ES6的字符串模板将常量TIMES动态传入,这里是为了方便演示写成常量,在实际项目中,它可以是一个动态的传入变量。

相关推荐