JS中正则表达式的声明以及修饰符
在JS中,声明正则表达式的语法为:
/pattern/modifiers
其中,pattern 即正则表达式的匹配模式,modifiers 即正则表达式的修饰符,两者组合在一起就是正则表达式在JS中的声明。
例如,"/^here is nice personal blog$/i" 就是用来匹配(不区分大小写)"here is nice personal blog"字符串。
modifier 一共有3个,即g、i与m。
修饰符(Modifier) | 描述 |
---|---|
g | g,即 global match,用来进行全局匹配 注: 1、如果没有g的话,在成功匹配第一个匹配项之后就不再继续匹配后续的字符串了 2、例如 "/\d{3}/" 在匹配字符串 "123 456" 的时候只会匹配到123,但是如果使用 "/\d{3}/g" 的话,则会匹配到123与456 3、可以通过 global 属性查看是否设置了 g 修饰符:
|
i | i,即 case-insensitive,在匹配的过程中将会忽略字母的大小写。
|
m | m,即 multiline,在所匹配的字符串中含有换行符(包括\n与\r)的情况下生效。
* 当没有 m 修饰符的时候,符号 "^" 是指整个所匹配的字符串的开头(字符串中包含\n),符号 "$" 是指整个所匹配的字符串(字符串包含\n)的末尾。 * 当有 m 修饰符的时候,匹配的时候将以行为单位(根据换行符进行行的划分),上面的例子中就可以划分成两行,此时符号 "^" 是指每一行的开头,符号 "$" 是指每一行的末尾。 2、可以通过 multiline 属性查看是否设置了 m 修饰符:
|
注:修饰符可以组合使用,例如 "/pattern/gim"
创建 RegExp 对象
创建JS中的 RegExp 对象一共有两种方式,一种是使用 new RegExp(pattern,modifiers),另一种是使用模式字面量(/pattern/modifiers),一般来说,更推荐使用模式字面量的形式来创建RegExp对象。
new RegExp
new RexExp(pattern,modifiers)
*pattern:是一个字符串,指定了正则表达式的模式
*modifiers: 是一个可选的字符串,指定了模式的修饰符(i、g 或 m)
例子:
var content='my phone is 66666666666';
var patt1=new RegExp('\\d{11}','g');
console.log(content.match(patt1)); //结果为[66666666666]
注意:因为此时 pattern 是一个字符串,所以反斜杆在字符串是一个转义字符,所以模式中类似于 \d 这样的元字符需要表示成 \\d
模式字面量
/pattern/modifiers
注意:模式字面量不是一个字符串,所以不要将其加上引号(包括单引号或者双引号),否则其就变成了字符串而不是模式字面量
var content='my phone is 66666666666';
var patt2=/\d{11}/g;
console.log(content.match(patt2)); //结果为[66666666666]
RegExp对象的属性
RegExp对象常见的属性有 global、ignoreCase、multiline、source 与 lastIndex。
source
属性 sourcey 用来返回正则表达式中模式(pattern)的文本
regExpObject.source
var patt=/nice/g;
console.log(patt.source); //结果为 nice ,即正则表达式中模式(pattern)的文本
lastIndex
属性 lastIndex 返回一个数字,用来表示匹配项的最后一个字符的位置。
regExpObject.lastIndex
注意:返回值从1开始计数,返回 0 表示没有匹配项。
var content='I love you !';
var patt=/o/g;
while(patt.test(content)==true)
console.log(patt.lastIndex); //结果分别为4,9
最后,希望这篇文章能带给你点启发,Have Fun!