javascript正则表达式分组-捕获性分组/非捕获性分组/正则前瞻

捕获性分组 vs. 非捕获性分组

捕获性分组(...)就是捕获分组所匹配的内容暂且存储在某个地方,以便下次使用,捕获性分组以(...)表示,有些地方将取得捕获性分组所匹配结果的过程称之为"反向引用"

非捕获性分组不捕获分组所匹配的内容,当然也就得不到匹配的结果,非捕获性分组以(?:...)表示,在一些只需要分组匹配但是并不需要得到各个分组匹配的结果时,使用非捕获性分组可以提高匹配速度


var now = "25/10/2009";
/(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);
RegExp.$1; //25
RegExp.$2; //10
RegExp.$3; //2009
now.replace(/(\d\d)\/(\d\d)\/(\d\d\d\d)/,"$3-$2-$1"); //2009-10-25
now.replace(/(\d{2})\/(\d{2})\/(\d{4})/,"$3-$2-$1"); //2009-10-25


正则前瞻 vs. 非捕获性分组

正则前瞻(?=)会作为匹配校验,但不会出现在匹配结果字符串里面

非捕获性分组(?:)会作为匹配校验,并出现在匹配结果字符里面,它跟(...)不同的地方在于,不作为子匹配返回。

例如:



var data = 'windows 98 is ok';
data.match(/windows (?=\d+)/);  // ["windows "]
data.match(/windows (?:\d+)/);  // ["windows 98"]
data.match(/windows (\d+)/);    // ["windows 98", "98"]


非捕获性分组定义子表达式可以作为整体被修饰但是子表达式匹配结果不会被存储。

非捕获性分组通过将子表达式放在"?:"符号后。

var str_img = "img1.jpg,img2.jpg,img3.bmp";
var reg = /(?:\w*)(?=\.jpg)/g;
var arr_m = str_img.match(reg);//arr_m = [ 'img1', '', 'img2', '' ]
var reg2 = /(?:\w*)(?:\.jpg)/g;
var arr_m2=str_img.match(reg2); //arr_m2=[ 'img1.jpg', 'img2.jpg' ]



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值