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 相关文章推荐
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
Jun 09 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
JS碰撞运动实现方法详解
Dec 15 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
ionic3 懒加载
Aug 16 Javascript
angularjs实现天气预报功能
Jun 16 Javascript
vue中如何使用ztree
Feb 06 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
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脚本数据库功能详解(上)
2006/10/09 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
Vue实现日历小插件
2019/06/26 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
小学门卫岗位职责
2013/12/17 职场文书
个人自荐材料
2014/05/23 职场文书
公务员培的训心得体会
2014/09/01 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
优秀校长事迹材料
2014/12/24 职场文书
培训师岗位职责
2015/02/14 职场文书
会计求职自荐信范文
2015/03/04 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技