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

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