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 Cookie的读取和写入函数
Dec 08 Javascript
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
微信小程序实现弹框效果
May 26 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
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
php 字符串函数收集
2010/03/29 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
英国钻石公司:British Diamond Company
2020/02/16 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
《分一分》教学反思
2014/04/13 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
大学毕业生推荐信
2014/07/09 职场文书
学习礼仪心得体会
2014/09/01 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
廉洁自律个人总结
2015/02/14 职场文书
员工福利申请报告
2015/05/15 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书