欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正则表达式的修饰符及构造函数

程序员文章站 2024-02-20 19:58:46
...

正则表达式的修饰符及构造函数

1. 修饰符

正则表达式还可以跟上修饰符(/exp/修饰符)限制正则表达式的行为。

介绍三个常用的修饰符:

修饰符 作用
i 忽略大小写
g 全局匹配
m 多行匹配

修饰符介绍:i

修饰符i表示匹配时忽略大小写,例如:

reg = /AbDe/i;
console.log(reg.test("   aBde   "));

正则表达式的修饰符及构造函数

修饰符介绍:g

修饰符g表示全局匹配。在没有修饰符g的情况下,只会进行第一次匹配,也就是说,只要找到符合正则表达式的子串,就停止匹配。

举例:

reg = /a/;
str = "aaabbaa";
str = str.replace(reg, "b");
console.log(str);

正则表达式的修饰符及构造函数

replace(reg:RegExp, str:string),是一个字符串的替换函数,将字符串中与正则表达式匹配的子串替换为str表示的字符串

在上面的例子中,想要将aaabbaa中的a都替换为b,但是最后的结果式baabbaa,这是因为正则表达式/a/只会进行第一次匹配,在第一次匹配之后,就停止匹配。

如果想要匹配完整的字符串,需要用到修饰符g
将上面代码中的正则表达式修改为:

reg = /a/g;

正则表达式的修饰符及构造函数

修饰符介绍:m

修饰符m表示多行匹配。

例如,有以下字符串aaabbaa\naaabbaa。如果想要通过replace()方法,将字符串改为baabbaa\nbaabbaa,也就是说将这个字符串(有两行)的每一行开头的a修改为b

举例:

reg = /^a/m;
str = "aaabbaa\naaabbaa";
str = str.replace(reg, "b");
console.log(str);

正则表达式的修饰符及构造函数

结果和预想的不一样,接下来分析原因

在匹配时,如果正则表达式没有被m修饰,在匹配字符串时,字符串只有一个开头^和结束$;如果正则表达式被修饰符m修饰,表示每一行的开头都可以和^匹配,每一行的结尾都可以被$匹配。上面的例子中,由于不是全局匹配,则第一次匹配成功后就结束

也就是说,上面的例子仍然需要全局匹配,正则表达式应该是/^a/mg(修饰符可以组合使用,没有顺序限制)

为了加深对修饰符m的理解,仅使用g修饰正则表达式:

reg = /^a/g;
str = "aaabbaa\naaabbaa"

结果也仅仅是修改了第一个a因为没有使用m,在匹配时,认为只有一个开头和一个结尾。如果加上m,每一行都有自己的开头(可以和^匹配)和自己的结尾

2. 构造函数RegExp(正则表达式,修饰符)

除了使用“字面量”的方式创建正则表达式对象,还可以使用构造函数创建正则表达式。

先来回顾一下通过字面量创建正则表达式的方式:
var reg = /表达式/修饰符

使用构造函数创建:

var reg = new RegExp(表达式, 修饰符)

举例:

var reg1 = /^abcd$/ig;
var reg2 = new RegExp("^abcd$", "ig");
console.log("reg1 = " + reg1);
console.log("reg2 = " + reg2);

使用字面量创建时,表达式的内容不用使用"",然而,使用构造函数时,第一个参数传入的是一个字符串,字符串的内容是表达式,因为是字符串,所以要使用双引号

使用构造函数创建的优点:参数可以使用变量

使用字面量和使用构造函数,都可以创建正则表达式对象。采用字面量创建的正则表达式是“死”的,而使用构造函数,表达式的内容(字符串)可以使用变量代替,因此使用构造函数创建更加灵活。

相关标签: JS