1、js中正则表达式的声明
var reg = /abc/;
var reg2 = new RegExp('abc');
2、正则表达式常用的三种模式
i ignoreCase 忽略大小写
g global 全局匹配(正常情况下,正则表达式发现第一个匹配项就停止工作,而/g模式下会继续查找)
m multiline 多行匹配
var reg = /a/i;
或 var reg = new RegExp("a","i"); //二者等价,匹配第一个a或者A
三者可以混用,如 /ab/ig
3、RegExp对象的属性
属性:global 是否设置/g属性
ignoreCase 是否设置/i属性
multiline 是否设置/m属性
lastIndex
source 正则表达式所对应的字符串
4、RegExp对象的方法
exec(string) 返回一个数组,没有匹配则返回null.虽然是数组,但一般情况下只返回的第一个匹配项。这个数组有两个特殊的属性index,input
test(string) 返回boolean,如果存在匹配的字符串,则true,反之false
var reg = /a/;
var text = "xyzabcdea";
alert(reg.lastIndex); // 0 <line:3>
var matches = reg.exec(text);
alert(matches.length);//1
alert(matches.index) //3,匹配字符的索引
alert(matches.input) //"xyzabcdea" exec传入的字符串
alert(reg.lastIndex); // 4 结合<line:3>
//当没有匹配时,lastIndex=0,当执行完一次匹配时,因为匹配的字符串的索引为3,所以lastIndex=4,从最后匹配的下一上字符开始查找
再来理解/g模式
var reg = /a/;
var text = "xyzabcdea";
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //3
//两次输出都为3,虽然执行了两次exec(),但是匹配的都是同一个a
如果改为/g模式,则会查找所有匹配的字符
var reg = /a/g;
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //8
再来理解/m模式
var reg = /a/;
var text = "xyzab\ncdea";
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //3
5、支持正则表达式的 String 对象的方法
match 返回一个数组,找到一个或多个正则表达式的匹配。
search 返回匹配字符的索引,没有返回-1。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。
var reg = /a/ig;
var text = 'abcabcA';
alert(text.match(reg));//a,a,A
var reg = /a/;
var text = 'abcabcA';
alert(text.search(reg));//0
注意的是search()方法不支持全局匹配正规表达式(带参数g)。无论查找几次,都找到的是第一个,没有找到返回-1
其实search()跟indexOf()功能差不多,只不过前者支持正则表达式,后者不支持
var reg = /a/g;
var text = 'abcabcA';
alert(text.search(reg));//0
alert(text.search(reg));//0
var reg = /a/;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcabcA
var reg = /a/ig;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcbbcb
//replace第二个参数可以是个函数
var reg = /[<>]/g;
var text = '<html></html>';
alert(text.replace(reg,function(match,pos,originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
}
}));
var reg = /abc/;
var reg2 = new RegExp('abc');
2、正则表达式常用的三种模式
i ignoreCase 忽略大小写
g global 全局匹配(正常情况下,正则表达式发现第一个匹配项就停止工作,而/g模式下会继续查找)
m multiline 多行匹配
var reg = /a/i;
或 var reg = new RegExp("a","i"); //二者等价,匹配第一个a或者A
三者可以混用,如 /ab/ig
3、RegExp对象的属性
属性:global 是否设置/g属性
ignoreCase 是否设置/i属性
multiline 是否设置/m属性
lastIndex
source 正则表达式所对应的字符串
4、RegExp对象的方法
exec(string) 返回一个数组,没有匹配则返回null.虽然是数组,但一般情况下只返回的第一个匹配项。这个数组有两个特殊的属性index,input
test(string) 返回boolean,如果存在匹配的字符串,则true,反之false
var reg = /a/;
var text = "xyzabcdea";
alert(reg.lastIndex); // 0 <line:3>
var matches = reg.exec(text);
alert(matches.length);//1
alert(matches.index) //3,匹配字符的索引
alert(matches.input) //"xyzabcdea" exec传入的字符串
alert(reg.lastIndex); // 4 结合<line:3>
//当没有匹配时,lastIndex=0,当执行完一次匹配时,因为匹配的字符串的索引为3,所以lastIndex=4,从最后匹配的下一上字符开始查找
再来理解/g模式
var reg = /a/;
var text = "xyzabcdea";
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //3
//两次输出都为3,虽然执行了两次exec(),但是匹配的都是同一个a
如果改为/g模式,则会查找所有匹配的字符
var reg = /a/g;
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //8
再来理解/m模式
var reg = /a/;
var text = "xyzab\ncdea";
var matches = reg.exec(text);
alert(matches.index) //3
var matches = reg.exec(text);
alert(matches.index) //3
5、支持正则表达式的 String 对象的方法
match 返回一个数组,找到一个或多个正则表达式的匹配。
search 返回匹配字符的索引,没有返回-1。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。
var reg = /a/ig;
var text = 'abcabcA';
alert(text.match(reg));//a,a,A
var reg = /a/;
var text = 'abcabcA';
alert(text.search(reg));//0
注意的是search()方法不支持全局匹配正规表达式(带参数g)。无论查找几次,都找到的是第一个,没有找到返回-1
其实search()跟indexOf()功能差不多,只不过前者支持正则表达式,后者不支持
var reg = /a/g;
var text = 'abcabcA';
alert(text.search(reg));//0
alert(text.search(reg));//0
var reg = /a/;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcabcA
var reg = /a/ig;
var text = 'abcabcA';
alert(text.replace(reg,'b'));//bbcbbcb
//replace第二个参数可以是个函数
var reg = /[<>]/g;
var text = '<html></html>';
alert(text.replace(reg,function(match,pos,originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
}
}));