正则表达式 match 和 exec 比较
match 和 exec 主要有两点不同:
1.exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:
var re=new RegExp(/\d/); re.exec( "abc4def" );
或者使用perl风格:
/\d/.exec( "abc4def" );
match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的:
"abc4def".match(\d);
或者
"abc4def".match("abc");
2.exec和match返回的都是数组
- 执行exec方法的正则表达式没有分组,那么如果有匹配,他将返回一个只有一个元素的数组;如果没有匹配则返回null。
- exec 不支持 i m g
下面两个alert函数弹出的信息是一样的:
var str= "cat,hat" ; var p=/at/; //没有g属性 alert(p.exec(str)) //["at"] alert(str.match(p)) //["at"]
这时exec和match 方法相等
var str= "cat,hat" ; var p=/at/g; //注意g属性 alert(p.exec(str)) //["at"]
alert(str.match(p)) //["at","at"]
因为exec永远只返回第一个匹配,而match在正则指定了g属性的时候,会返回所有匹配。
3.exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)
如下的代码将弹出"cat2,at":
var str= "cat2,hat8" ; var p=/c(at)\d/; alert(p.exec(str)) //["cat2","at"]
match函数在满足如下条件下将越俎代庖,实现和exec一样的功能:
- 1、正则表达式中含有分组(括号)
- 2、返回唯一的匹配 ,不使用 g,m时候
var str= "cat2,hat8" ; var p=/c(at)\d/; alert(p.exec(str)) //["cat2","at"] alert(str.match(p)) //["cat2","at"]
var p=/c(at)\d/g;alert(str.match(p))//["cat2","at"]
4. 分组匹配, (?:) 不参与分组
var regis=/^(?:[a-z]+(\d)|(#))$/;
regis.exec("ab2") //["ab2","2",undefined]
regis.exec("#") //["#",undefined,"#"] ,注意 "ab#" 返回的是 null
有两个分组,(\d)和 (#),虽然用 | 分隔,但是两个都参与分组
总结:
exec 永远返回的是第一个匹配的元素,如果分组其返回数组包括第一个匹配的字串,以及所有分组的反向引用
match 是返回所有匹配的字符串的数组,但是正则表达式必须指定全局g属性才能返回所有匹配,不指定g属性与exec的效果相同。
正则表达式 match 和 exec 比较的更多相关文章
- 正则表达式之g标志,match和 exec
1.g标志 g标志一般是与match和exec来连用,否则g标志没有太大的意义. 先来看一个带g标志的例子: var str = "tankZHang (231144) tank yi ...
- 正则表达式中的exec和match方法的区别
正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...
- 正则表达式之match与exec【转的 楼兰之风】
彻底领悟javascript中的exec与match方法 阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText= ...
- js正则表达式中test,exec,match方法的区别说明
js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...
- 探究js正则匹配方法:match和exec
match是字符串方法,写法为:str.match(reg) exec是正则表达式方法,写法为:reg.exec(str) match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是nu ...
- JavaScript match()方法和正则表达式match()
先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组.如果没有找到匹配结果,返回null.语法结构: 1 str.match(searchvalue)参数解析:(1). ...
- js正则表达式中test,exec,match方法的区别
test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1." ...
- js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。
match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...
- JavaScript中正则表达式test()、exec()、match() 方法
转自http://www.cnblogs.com/jane-y/articles/5183859.html 1.test test 返回 Boolean,查找对应的字符串中是否存在模式.var str ...
随机推荐
- 基于Ruby的watir-webdriver自动化测试方案与实施(二)
接着基于Ruby的watir-webdriver自动化测试方案与实施(一) http://www.cnblogs.com/Javame/p/4159360.html 继续 ... ... 回顾 软 ...
- 我的第一个React Native App
我用了三天时间实现了一个相对比较完整的React Native 新闻发布类型的示例.应用做得很简单,但大多React Native的组件都有用到,今天做一个分享(由于我电脑是Windows系统,所以只 ...
- jdbc连接数据库的步骤 (转)
1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String classN ...
- 一则因为numa引发的mysqldump hang住
新买的dell r430服务器,双CPU,64G内存,单CPU32g,swap 3G 出现故障现像:mysqldump时会hang住,innodb_buffer_pool_size = ...
- 从微软下载安装Windows10
如果你需要安装或重新安装 Windows 10,可以通过此页面上的工具,使用 U 盘或 DVD 创建你自己的安装介质. 开始之前 确保你具有以下内容: Internet 连接(可能产生 Interne ...
- 将Apache手动安装成Windows的服务
将Apache手动安装成Windows的服务 可以选择在安装Apache时自动将其安装为一个服务.如果选择"for all users",那么Apache将会被安装为服务. 如果选 ...
- cookie实现记住密码
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- WPF Tookit Chart
如何使用Chart 实例: Binding数据源中是一个KeyValuePair对象.可以是Dictionary. <charting:Chart x:Name="chtSumma ...
- oracle 倒库后insert id冲突的问题
错误为:ORA-00001: unique constraint violated 把test库的数据导入到另一个库后,忘记修改自增id sequence的nextval了,因此,当前的数据库中数据和 ...
- mybatis 快速入门
1 . 定义 java实体类 User,建立user表 读者请自行完成准备工作. User 类 有 id, name,age 属性 user 表 中 id,name,age字段 id自增长 ...