昨天帮朋友处理一段文本正好用到了这个,记录一下。

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);