js正则表达exec与match的区别说明


Posted in Javascript onJanuary 29, 2014

以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。

最近开发遇到一些需要使用正则表达式,顺便研究一下

正则表达式对象有两个定义方式::

1、第一种定义:

new RegExp(pattern, attributes);如var reg = new RegExp("abc","g")

其中pattern为表示表达式内容,如上表示匹配abc

attributes:g,全局匹配,i不区分大小写,m执行多行匹配,用最多的为g和i

2、第二种定义:/pattern/attributes.

如:var reg = /abc/g;

正则表达的规则一些规则在此不再说明,只记录exec和match的区别:

1、exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:

如上定义
var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
reg.exec(str ); 

2、match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达,如

var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
str.match(reg);

3、exec和match返回的都是数组;

如果exec执行的正则表达式没有子表达式(小括号内的内容,如/abc(\s*)/中的(\s*) ),如果有匹配,就返回第一个匹配的字符串内容,此时的数组仅有一个元素,如果没有匹配返回null;

var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

执行如上代码,你会发现两者内容均为一样:abc,

4、如果定义正则表达对象为全局匹配如:

var reg = new RegExp("abc","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

则 为abc和abc,abc;因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。

5、当表示中含有子表达式的情况:

var reg = new RegExp("a(bc)") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

你会发现两者执行的结果都是:abc,bc;

6、当如果正则表达式对象定义为为全局匹配

var reg = new RegExp("a(bc)","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

则两者返回的结果是abc,bc和abc,abc,

总结为:

1、当正则表达式无子表达式,并且定义为非全局匹配时,exec和match执行的结果是一样,均返回第一个匹配的字符串内容;

2、当正则表达式无子表达式,并且定义为全局匹配时,exec和match执行,做存在多处匹配内容,则match返回的是多个元素数组;

3、当正则表达式有子表示时,并且定义为非全局匹配,exec和match执行的结果是一样如上边的第5种情况;

4、当正则表达式有子表示时,并且定义为全局匹配,exec和match执行的结果不一样,此时match将忽略子表达式,只查找全匹配正则表达式并返回所有内容,如上第6种情况;

也就说,exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同

Javascript 相关文章推荐
JavaScript arguments 多参传值函数
Oct 24 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
js利用数组length属性清空和截短数组的小例子
Jan 15 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
jQuery EasyUI封装简化操作
Sep 18 Javascript
AngularJS过滤器filter用法分析
Dec 11 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
在Uni中使用Vue的EventBus总线机制操作
Jul 31 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 #Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 #Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 #Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 #Javascript
原生javascript实现无间缝滚动示例
Jan 28 #Javascript
IE、FF浏览器下修改标签透明度
Jan 28 #Javascript
纯css+js写的一个简单的tab标签页带样式
Jan 28 #Javascript
You might like
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
JsDom 编程小结
2011/08/09 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
详解vue组件通信的三种方式
2017/06/30 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Python实现文件复制删除
2016/04/19 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python打包成so文件过程解析
2019/09/28 Python
python将时分秒转换成秒的实例
2019/12/07 Python
用python对oracle进行简单性能测试
2020/12/05 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
销售工作人员的自我评价分享
2013/11/10 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
六查六看六改心得体会
2014/10/14 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
助学感谢信范文
2015/01/21 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书