JS正则表达式中的修饰符
程序员文章站
2024-02-20 19:58:34
...
修饰符
1. i(ignore case) 不区分大小写
var pattern = /hello/i;
var str = 'Hello world';
console.log(pattern.ignoreCase); //true
console.log(pattern.test(str)); //true
console.log(pattern.exec(str)); //Array [ "Hello" ]
console.log(str.match(pattern)); //Array [ "Hello" ]
2. g(global) 全局
RegExp.lastIndex 如果匹配模式带有g
,这个属性存储在整个字符串中下一次检索的开始位置,这个属性会被exec()
,test()
方法调用到(不带g
永远返回0)。
var pattern = /hello/ig;
var str = 'Hello helloworld';
console.log(pattern.global); //true
console.log(pattern.test(str)); //true
console.log(pattern.lastIndex); //5
console.log(pattern.exec(str)); //Array [ "hello" ]
3. m(multiline) 多行
如果目标字符串中不含有换行符\n
,即只有一行,那么/m
修饰符没有任何意义。
var pattern = /hello/im;
var pattern1 = /hello/i;
var str = 'Hello world'; //目标字符串不含换行符\n
console.log(pattern.multiline); //true
console.log(pattern1.multiline); //false
console.log(pattern.test(str)); //true
console.log(pattern1.test(str)); //true
console.log(pattern.exec(str)); //Array [ "Hello" ]
console.log(pattern1.exec(str)); //Array [ "Hello" ]
如果正则表达式中不含有^
或$
匹配字符串的开头或结尾,那么/m
修饰符没有任何意义。
var pattern = /hello/im; //正则表达式不含^或$
var pattern1 = /hello/i;
var str = 'Hello\nworld';
console.log(pattern.test(str)); //true
console.log(pattern1.test(str)); //true
也就是说只有当目标字符串含有\n
,而且正则表达式中含有^
或$
的时候,/m
修饰符才有作用。如果multiline
为 false,那么^
与字符串的开始位置相匹配,而$
与字符串的结束位置相匹配。 如果 multiline
为 true,那么^
与字符串开始位置以及\n
或\r
之后的位置相匹配,而$
与字符串结束位置以及\n
或\r
之前的位置相匹配。
var pattern = /^hello/im; //正则表达式不含^或$
var pattern1 = /^hello/i;
var str = 'Hi\nhello\rworld';
console.log(pattern.test(str)); //true
console.log(pattern1.test(str)); //false
\r
\n
在windows下代表换行,如果只有1个\n
也是一样的效果。由于str
是以Hi
开头的字符串,所以匹配pattern1
的结果是false
;由于str
是多行字符串(含有\n
),而第二行是以hello
开头,所以匹配pattern
结果是true
。