js正则全局匹配时获取捕获组
来源:互联网 发布:win10 数据恢复 编辑:程序博客网 时间:2024/06/05 19:53
在看js高程时,发现一个问题,js正则可以获取捕获组,但是只能获取一个,加上全局匹配时,就不能获取捕获组,,,这就很让人头疼了,如图:
我需要获取两个 td 标签里的日期,用正则 match ,对于需要捕获的区域,用 ([\s\S]*?)去捕获:
var str='<td class="data">2014-4-4</td><br /><td class="data">2014-4-5</td>';var matches=str.match(/<td[^>]*?>([\s\S]*?)<\/td>/);matches;
初看起来很正常,那我们如果两个都抓呢?那就要全局匹配,加上 g ;
大家前后对比下,很明显不行,捕获失败,,,
为什么会失败呢,其实我觉得可以理解,因为这里匹配到了两处(matches[0],matches[1]),那两处各自有一个捕获区域(catches[0],catches[1]),那这个返回数组里如果有捕获区域的话,就应该有四项:
[matches[0],catches[0],matches[1],catches[0]]
在这里就是:
["<td class="data">2014-4-4</td>", "2014-4-4","<td class="data">2014-4-5</td>", "2014-4-5"]
那咱们再发散下,匹配可能有多项,捕获也可能有多项,那这样,这个数组里如果都有捕获区域的话,那返回的数组最终应该是这样:
[matches[0],catches[0],catches[1]……catches[n],matches[1],catches[0],catches[1]……catches[n],matches[2],catches[0],……………matches[m],catches[0],……….catches[n]]
如果是这样,问题就来了,,,这个返回的数组是不是很难读,也很难操作?
那么js就没有办法全局匹配同时捕获数据嘛?
咦,我想到了一个很蠢的方法,可以一试,,,
用上面的例子来测试,代码就是这样的:
var str='<td class="data">2014-4-4</td><br /><td class="data">2014-4-5</td>';var matches=str.match(/<td[^>]*?>([\s\S]*?)<\/td>/g);var matches2=matches.toString().replace(/<td[^>]*?>([\s\S]*?)<\/td>/g,"$1").split(",");
看看效果,是不是呀?
代码可以简化下,就是这样:
var str='<td class="data">2014-4-4</td><br /><td class="data">2014-4-5</td>';var reg=/<td[^>]*?>([\s\S]*?)<\/td>/g;var data=str.match(reg).toString().replace(reg,"$1").split(",");
原理嘛,很简单啦,测试测试就明白啦:
还要上张图,解释下 replace:js高级程序设计,第145页,关于 replace 方法的第二个参数的使用
这里就是,先获取到所有的 mathces 数组,然后转为字符串,用 catches 替换 matches ,这样就只有 catches 了,然后通过split把他们通过分隔符,转为数组,本来数组转为字符串也是默认通过,分割
的嘛;
- js正则全局匹配时获取捕获组
- js正则匹配获取文件名
- js中使用正则表达式,全局匹配时如何取到匹配串?
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- Java正则全局匹配
- js 正则 捕获和非捕获
- js中捕获全局回车事件
- js 正则表达式捕获型
- 2014-6-27-js-正则-匹配获取url参数
- JS正则获取文本中的多个匹配
- 捕获组匹配
- JS学习31:关于正则全局匹配结果为奇偶真假的小疑问
- 关于正则匹配的异常捕获
- 正则:非获取匹配
- js 正则匹配
- JS正则匹配大全
- js正则匹配
- JS正则匹配大全
- GCC生成的虚表
- Hadoop基础教程-第4章 HDFS的Java API(4.1 Maven入门)
- 装饰模式
- word中实现文献引用
- solr的相关操作(addDocument,flush,commit,rollback,optimize,close)解析
- js正则全局匹配时获取捕获组
- 想成为程序员,这些技能不能少
- MacOSX(类FreeBSD?)的坑
- weex初尝试
- linux驱动调试的一下特殊知识点
- 北理2017校赛
- 链表的测试
- 自定义SlidingMenu
- 卡片效果CardView