正则匹配:match与exec


1.match是字符串的方法,exec是正则对象实例的方法

var s='我的世界1234567abcdefg';
var result=s.match(/\d/);
console.log(result);//返回一个数组,数组长度为1,包含匹配到的项,另外还有index和input属性

var s='我的世界1234567abcdefg';
var result=/\d/.exec(s);
console.log(result);//结果同string.match(reg)

2.正则表达式中没有子表达式,且非全局匹配(没有修饰符g),match和exec结果一样都是返回数组如上方第一点

3.正则表达式中含有子表达式,且非全局匹配,match和exec结果一致

var s='abc,bbc,cbc,dbc';
var result=/(\w)bc/.exec(s);
console.log(result);
var result2=s.match(/(\w)bc/); console.log(result2); //['abc','bc'],返回长度为2的数组,第一项时匹配项,第二项是子表达式捕获项,包含属性,index和input,index是匹配项开始的下标

4.正则表达式中没有子表达式,全局匹配。match返回所有匹配项组成的数组,exec返回一个匹配项的数组

var s='abc,bbc,cbc,dbc';
var result=/\wbc/g.exec(s);
console.log(result);
//['abc'],index为0,input为'abc,bbc,cbc,dbc'

var result2=s.match(/\wbc/g);
console.log(result2);
//['abc','bbc','cbc','dbc']

5.正则表达式中有子表达式,全局匹配。match返回所有匹配项组成的数组,忽略子表达式的捕获项,exec忽略全局匹配。

var s='abc,bbc,cbc,dbc';
var result=/(\w)bc/g.exec(s);
console.log(result);
//['abc','a'],index为0,input为'abc,bbc,cbc,dbc'

var result2=s.match(/(\w)bc/g);
console.log(result2);
//['abc','bbc','cbc','dbc']

6.exec适合用于循环匹配,虽然全局匹配和非全局的返回值一样,但使用exec循环时,必须要加修饰符g

var s='abc,bbc,cbc,dbc';
var reg=/(\w)bc/g;
//循环匹配时,要先将正则表达式定义好,不然每次都是一个新的正则对象,影响lastIndex的变化
//一定要加修饰符g,lastIndex是匹配项后面的下标,是下一次匹配的开始下标
//当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0
var resultArr=[];
while(result=reg.exec(s)){ 
console.log("lastIndex: "+reg.lastIndex);
//lastIndex: 3
//lastIndex: 7
//lastIndex: 11
//lastIndex: 15
resultArr.push(result);
}
console.log(JSON.stringify(resultArr));//[["abc","a"],["bbc","b"],["cbc","c"],["dbc","d"]]

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM