昨天帮朋友处理一段文本正好用到了这个,记录一下。
1 2 3 4 5 6 7 8 9 10 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #正则表达式语法 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); |