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 相关文章推荐
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
关于JS控制代码暂停的实现方法分享
Oct 11 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
下拉框select的绑定示例
Sep 04 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
jQuery滚动插件scrollable.js用法分析
May 25 jQuery
使用Node.js实现ORM的一种思路详解(图文)
Oct 24 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 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中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
php银联网页支付实现方法
2015/03/04 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
初识ThinkPHP控制器
2016/04/07 PHP
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
Vue.js用法详解
2017/11/13 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Python时间获取及转换知识汇总
2017/01/11 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
keras 多gpu并行运行案例
2020/06/10 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
大学生职业生涯规划书模板
2014/01/03 职场文书
五一服装活动方案
2014/01/11 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
大学军训决心书
2015/02/05 职场文书
大二学年个人总结
2015/03/03 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
销售人员管理制度
2015/08/06 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js