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 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
js使用心得分享
Jan 13 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
JS图片放大效果简单实现代码
Sep 08 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
Feb 20 Javascript
JavaScript门道之标准库
May 26 Javascript
详解小程序循环require之坑
Mar 08 Javascript
详解element-ui中表单验证的三种方式
Sep 18 Javascript
vscode中Vue别名路径提示的实现
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
php数组键名技巧小结
2015/02/17 PHP
10条php编程小技巧
2015/07/07 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
JS实现小米轮播图
2020/09/21 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
总裁秘书岗位职责
2013/12/04 职场文书
小组合作学习反思
2014/02/18 职场文书
在校实习生求职信
2014/06/18 职场文书
2014年话务员工作总结
2014/11/19 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书