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" ...
随机推荐
- makefile文件制作入门
一.首先,看一下最简单的C文件 //hello.c文件 #include <stdio.h> void main() { printf("hello world\n") ...
- iOS 9 适配需要注意的问题
iOS 9 适配需要注意的问题 1`网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL.采用TLS 1.2 协 ...
- [Castle Windsor]学习依赖注入
初次尝试使用Castle Windsor实现依赖注入DI,或者叫做控制反转IOC. 参考: https://github.com/castleproject/Windsor/blob/master/d ...
- MVC异步 导入excel文件
View页面 js文件.封装到一个js文件里面 (function ($) { //可以忽略 var defaultSettings = { url: "http://upload.zhtx ...
- 学习C++ Primer 的个人理解(零)
由于自己看书之后经常容易忘记细节,所以写在博客上让我自己的思路更加清晰一些. 我的博客仅仅只是将书中的内容概括一下,有一些不好理解的部分我会用我自己理解的方式使用大白话写出来. 仅此而已.
- 模板:qsort+bsearch应用
(1)qsort: 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)( ...
- 利用getComputedStyle方法获取元素css的属性值
在平时的工作中有时候会碰到需要获取元素当前样式的问题,查了一下可以用getComputedStyle这个方法来获取元素计算后的样式(有些我们在css里面没有写的,浏览器默认的样式也可以获得) getC ...
- php之面向对象(1)
讲到面向对象 先回顾下以前的编程思路,所谓编程思路就是根据知识本质原理通过逻辑推理程序的过程,编程思路,讲究的是先明确要做的事情是怎么.离开代码的情况下,自己也要能明白这一件事情怎么做.而不是把代码背 ...
- IdTCPServer, idTCPClient
IdTcpServer uses IdContext //需要引用 属性,方法: IdTCPServer.Active :=True; //开启服务器 IdTCPServer1.Bindings.Ad ...
- python--multiprocessing多进程总结
由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiproces ...