1、正则表达式中参数g、i、m的作用(share)
参数 g
g 只影响于 exec、match 方法。
若不指定 g,则:
- exec 只返回第一个匹配;
- match 只返回第一个匹配。
- String对象的replace只替换第一个匹配
// exec
var regx=/user\d/;
var str="user18dsdfuser2dsfsd";
var rs=regx.exec(str); //rs:{user1}
var rs2=regx.exec(str); //rs2:{user1}
alert("rs: " + rs + "\nrs2: " + rs2);
// match
var regx=/user\d/;
var str="user18dsdfuser2dsfsd";
var rs=str.match(regx);//rs:{user1}
var rs2=str.match(regx);//rs2:{user1}
alert("rs: " + rs + "\nrs2: " + rs2);
// replace
var str="1a1b1c";
alert(str.replace(/l/, "")); // a1b1c
若指定 g,则:
- 每次调用 exec 都从上一个匹配之后查找新的匹配;
- match 返回所有的匹配。
- 对于String对象的replace方法,则替换所有匹配。
// exec + g
var regx=/user\d/g;
var str="user18dsdfuser2dsfsd";
var rs=regx.exec(str); //rs:{user1}
var rs2=regx.exec(str); //rs2:{user2}
alert("rs: " + rs + "\nrs2: " + rs2);
// match + g
var regx=/user\d/g;
var str="user18dsdfuser2dsfsd";
var rs=str.match(regx);//rs:{user1,user2}
var rs2=str.match(regx);//rs2:{user1,user2}
alert("rs: " + rs + "\nrs2: " + rs2);
// replace + g
var str="1a1b1c";
alert(str.replace(/l/g, "")); // abc
其他加不加g,不影响:
- test
- split
- replace
- search
参数 i
参数 i 是指忽略大小写,注意仅是忽略大小写,并不忽略全半角。
参数 m
m 影响对行首、行尾的解释,也就是影响 ^,$。
若指定 m,则:^ 只在字符串每一行的开头,$ 在字符串第一行的结尾。
若不指定m,则:^ 只在字符串的最开头,$ 只在字符串的最结尾。
var str = "123\r\n456";
var reg1 = new RegExp("^123$\r\n^456$", "m"); // true
var reg2 = new RegExp("^123$\r\n^456$", ""); // false
var reg3 = new RegExp("123\r\n456","m"); // true
var reg4 = new RegExp("123\r\n456",""); // true
alert(reg1.test(str) + "\r\n" + reg2.test(str) + "\r\n" + reg3.test(str) + "\r\n" + reg4.test(str));