JS正则表达式中的修饰符

修饰符

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

你可能感兴趣的:(JS)