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中hasOwnProperty()的作用
Jun 05 Javascript
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
javascript 正则表达式分组、断言详解
Apr 20 Javascript
微信小程序 检查接口状态实例详解
Jun 23 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
Mar 19 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如何透过ODBC来存取数据库
2006/10/09 PHP
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
Angular的$http与$location
2016/12/26 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
javascript中函数的写法实例代码详解
2018/10/28 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Python类继承和多态原理解析
2020/02/05 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python三引号如何输入
2020/07/06 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
幼儿园中班区域活动总结
2014/07/09 职场文书
求职信格式范文
2015/03/19 职场文书