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 Prototype 对象扩展
May 15 Javascript
CCPry JS类库 代码
Oct 30 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
jquery图片切换插件
Mar 16 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
Dec 03 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
Dec 27 Javascript
ES6 Promise对象概念与用法分析
Apr 01 Javascript
JS实现数组的增删改查操作示例
Aug 29 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
Oct 20 Javascript
layui lay-verify form表单自定义验证规则详解
Sep 18 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
提取HTML标签
2006/10/09 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Python类反射机制使用实例解析
2019/12/30 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
pymysql模块使用简介与示例
2020/11/17 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
总务岗位职责
2013/11/19 职场文书
三严三实学习心得体会
2014/10/13 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
期末复习计划
2015/01/19 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS