javascript获取正则中的子匹配
昨天帮朋友处理一段文本正好用到了这个,记录一下。
- var str = '<a href="http://google.com" target="_blank">google</a>123<a title="百度" href="http://baidu.com">baidu</a>abce<a href="http://msn.com" class="msn">msn</a>kkk';
- var reg = /<a.*?href="([^"]*)"[^>]*>([^<]*)</a>/i; // *? 非贪婪匹配
- var arr = [];
- while(reg.exec(str)){
- arr.push({'link':RegExp.$1 , 'text':RegExp.$2});
- str = RegExp.rightContext;//将str截断
- reg.lastIndex = 0;//重置下次匹配开始的位置
- }
- console.info(arr);
另外两种正则表达式语法有一些不同,比如说转义。
- #正则表达式语法 1
- re = /pattern/[flags]
- #正则表达式语法 2
- re = new RegExp("pattern",["flags"])
- #比如说要匹配"潘魏增(panweizeng)",同时获取其中的子匹配panweizeng,对应的写法如下
- var reg = /[^(]+(([^)]+))/g;
- #这里需要对括号使用两个转义符号
- var reg = new RegExp("[^\(]+\(([^\)]+)\)", "g");
- var submatch;
- if(reg.exec(str)){
- submatch = RegExp.$1;
- reg.lastIndex = 0;
- }
- console.info(submatch);

ze 发表于2009年03月30日 1:22 am
reg=’$yours+g”
str=str.replace(reg,function(){
arr.push({‘link’:argument[1],
‘text’:argument[2]
});
retuen ”;
})
Panther 发表于2009年05月17日 11:20 pm
也是老潘家的