正则匹配: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"]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值