正则表达式中的test 和exec方法
RegExp.prototype.test(str);
测试字符串中是否含有正则表达式模式的字符串
有返回true 没有返回false
var reg1 = /\w/;
var reg2 = /\w/g;
reg1.test("a")
//true
reg1.test("b")
//true
reg2.test("ab")
true
reg2.test("ab")
true
reg2.test("ab")
false
reg2.test("ab")
true
reg2.test("ab")
true
reg2.test("ab")
false
//多执行会出现这样的问题,是因为lastIndex的问题,它的意思是,匹配元素最后位置的下一个位置。lastIndex在全局匹配中才有,非全局为0
RegExp.prototype.exec(str)
已正则的规则对字符串执行搜索,并更新RegExp对象返回匹配结果。
如果匹配到就返回一个结果数组!没有则返回null
var reg1 = /\d(\w)(\w)\d/;
var reg2 = /\d(\w)(\w)\d/g;
var text = "1az23cd45ef6";
var reg = reg1.exec(text);
//reg 是一个数组 ["1az2", "a", "z", index: 0, input: "1az23cd45ef6"]
第一个元素 是匹配的字符,后边的是分组的值,有几个分组,就会多加几个,index是开始匹配的位置 如果text变成*1az23cd45ef6 index就变成1了,input 的值为 所匹配字符串
接下来看一下全局匹配。
while(reg = reg2.exec(text)){console.log("lastIndex"+reg2.lastIndex+"\"+reg)}
lastIndex4\1az2,a,z
lastIndex8\3cd4,c,d
lastIndex12\5ef6,e,f
"1b2c3d".search(/1/);//0;
"1b2c3d".search(/10/);//-0;
//取到为大于-1,取不到为-1
match方法
var reg3 = /\d(\w)\d/;
var reg4 = /\d(\w)\d/g;
var ts = "$1d1$1w2";
var reg = ts.match(reg3);
split
"1d2d3c5d".split(/\d/);
["", "d", "d", "c", "d"]
"1d1c1d1c".replace(/1/,'2');
"2d1c1d1c"
//match 匹配的数据 index 字符位置,orgin 为原字符串
"1d2d3d4d5c".replace(/\d/g,function(match,index,orgin){
return parseInt(match)+1;
})
"1d2d3d4d5c".replace(/(\d)(\w)(\d)/g,function(match,group1,group2,group3,index,orgin){
return group1+group2;
})
"1dd3dd5c"