str.match(regex)与regex.exec(str)对比解析,从此不再晕
match属于字符串的方法,exec属于正则表达式的方法。其中regex是否有g标志的区别经常搞不清,所以测试记录下。
1、str.match(regex) regex中无g标志
返回一个数组,arr[0]代表匹配项,arr[≥1]代表捕获的group。index是匹配项的第一个字符索引,input代表str字符串。

2、str.match(regex) regex中有g标志
返回一个数组,arr[0]代表第一个匹配项,arr[1]代表第二个匹配项...,length代表有几个匹配项,没有捕获的group。

3、regex.exec(str) regex中无g标志
返回一个数组,arr[0]代表匹配项,arr[≥1]代表捕获的group。index是匹配项的第一个字符索引,input代表str字符串。(与没有g标志的str.match(regex)等效)

正则的lastIndex没有被重置,所以即使再次运行,还是从字符串起始点查询

4、regex.exec(str) regex中有g标志
返回一个数组,arr[0]代表匹配项,arr[≥1]代表捕获的group。index是匹配的第一个字符索引,input代表str字符串。

正则的lastIndex被重置,所以下次查询会从字符串lastIndex处开始查询,利用这点可以遍历出所有结果。(另外test()方法也会重置lastIndex)

通过while遍历
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>str.match(regex)与regex.exec(str)</title>
<script type="text/javascript">
str = "xxabbb34eftab0modabb6";
var regex = /a(b+)(\d+)/g;
var arr;
while ((arr = regex.exec(str)) != null) {
document.write("arr.length=" + arr.length + "<br/>");
for (var i = 0; i < arr.length; i++) {
document.write(i + ":" + arr[i] + "<br/>");
}
document.write("<br/>");
}
</script>
</head>
<body>
</body>
</html>
结果

5、总结
1、如果均没有g标志,str.match(regex)等效于regex.exec(str)
2、下表总结了他们的区别

str.match(regex)与regex.exec(str)对比解析,从此不再晕的更多相关文章
- 正则中str.match(pattern)与pattern.exec(str)的区别
这两个函数除了调用对象以及参数不同之外,<javascript高级程序设计>中对exec描述比较详细,对match只是说返回数组跟exec一样.书中并没有说只说了正则在非全局模式下的情况, ...
- php preg_match($p, $str, $match)方法简介
方法作用:匹配指定的正则表达式并将结果放在$match数组中 代码示例: $p = '/name:([\\ws]+)/'; $str = "name:steven jobs"; p ...
- string.match(RegExp) 与 RegExp.exec(string) 深入详解
string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...
- Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...
- Node.js之【正则表达式函数之match、test、exec、search、split、replace使用详解】
1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...
- 正则表达式中的match,test,exec,search的返回值
今天突然被问到了正则表达式,因为长时间不用突然不知道怎么用了,只知道有这么个东西.然后去网上查了一下,感觉写的不少,但解释的有点模糊,今天我来浅谈一下. 1,match的用法 A,在不加全局“g”的情 ...
- javascript正则表达式总结(test|match|search|replace|split|exec)
test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str ...
- 关于String str =new String("abc")和 String str = "abc"的比较
String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...
- String str=new String("a")和String str = "a"有什么区别?
问:String str=new String("a")和String str = "a"有什么区别? 答:String str = "a" ...
随机推荐
- 01顺序栈_Stack---(栈与队列)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- 嵌入式系统关机/Embeded System PowerOff HowTo?
REFER: 嵌入式Linux实现关机命令 REFER: Embedded File System and power-off REFER: kernel/reboot.c REFER: PowerO ...
- Java对象的序列化与反序列化:默认格式及JSON格式(使用jackson)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3558663.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- JS 版的pnp in_array($str,$arr)
var a = Array(1,2,3,4,5); function in_array(search,array){ for(var i in array){ if(array[i]==search) ...
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- https证书申请
因为要为海外组的aws设置https证书,由于使用的是新的域名,所以要先申请购买证书,然后设置上去.由于是第一次做这件事.所以过程有些坎坷. 先购买https证书.看了几家,感觉GoDad ...
- 链表C++模板实现
#include <iostream.h> #include <stdlib.h> //结点模板类 template <typename t1, typename t2& ...
- 用C#开发一个WinForm版的批量图片压缩工具
我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片).归类(根据格式进行分类,比如jpg格式.bmp格式等).压缩(因为有的图片很大很占空间,看 ...
- 【6】了解Bootstrap栅格系统基础案例(1)
从上一张我们了解了栅格选项,那么我们就来了实战了解下吧(其实还是中文官网的案例) ps.我这里是电脑上用谷歌浏览器来观察的,毕竟电脑的分辨率高(1440*900px),谷歌浏览器最大化后,值比大屏幕设 ...
- (转载)Delphi开发经验谈
Delphi开发经验谈 开发环境-------- Delphi 7是一个很经典的版本,在Win2000/XP下推荐安装Delphi 7来开发软件,在Vista下推荐使用Delphi 2007开发软件. ...