js正则表达exec和match的区别(转)

转自:http://blog.csdn.net/fushou/article/details/6934608

以前用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则于全局相关联,当定义为非全局,两者执行结果相同;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软推出免费在线系统诊断工具--不用手动下载

在运行框中输入以下地址:\\live.sysinternals.com,所有工具都在Tools下,Files目录有可供下载的压缩包。。Microsoft Corp. has launched a beta service that lets Windows users launch the Sysinternals library of free diagnostic and tr…

开源软件

邮件服务器: Postfixftp服务器: vsftpd统计: nginx access log awstats 统计: google统计 google分析 腾讯分析 分布式锁及配置管理:Zookeeper php框架:thinkphp运维监控: cacti数据同步&#…

cad.net 获取所有已经安装的cad版本信息

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Hardcopy 转载于:https://www.cnblogs.com/JJBox/p/11381254.html

Restangular的使用

2019独角兽企业重金招聘Python工程师标准>>> // First way of creating a Restangular object. Just saying the base URL var baseAccounts Restangular.all(accounts); // This will query /accounts and return a promise. baseAccounts.getList().then(functio…

浅析数据质量检查

What are the four broad categories of data quality checks? Provide an implementation technique for each. 数据质量检查的四大类是什么?为每类提供一种实现技术。 答:数据质量检查是ETL工作中非常重要的一步,主要关注一下四个方面。 1…

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法: 把数据窗口的数据源转换到syntax模式下就行了 ! 转载于:https://www.cnblogs.com/Tonyyang/archive/2008/06/03/1212689.html

刚发现的2011年最给力的春联

上联:房价涨.地价涨.油价涨.电价涨.水价涨.粮价涨.肉价涨.蛋价涨.菜价涨.药价涨.这也涨.那也涨.怎一个涨字了得.涨了还涨。 下联:上学难.参军难.就业难.买房难.租房难.择偶难.结婚难.育儿难.就医难.养老难.男也难.女也难.看世间难字当头.难上加难 横批:活…

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的。 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的,只要发生了改变,就可以立即传送到备库&…

VSS不需要验证自动登录的问题

新项目要开始了,搭建好开发环境以及项目框架后,遇到第一个问题就是我自己的机子打开VS不需要登陆VSS就直接打开了解决方案,而其他的同事则没有遇到这样的情况,于是搜索了下原因,发现是设置问题: 1,在VSS管理器中》工具》选项》允许网络用户名自动登录 这个选项去掉 …

说说“开源杀死商业开发工具”

今天在Solidot看到一条很有意思的短文,标题是“开源杀死商业开发工具”,其文如下: UNA,源自拉丁形容词“together”,是一种协作式的实时源代码开发环境,允许两个或更多的开发者同时编辑相同的代码。支持大部…

ubuntu22.04 安装vscode

安装 Visual Studio Code(VSCode)在 Ubuntu 22.04 系统上是一个简单的过程。以下是步骤指南: 更新系统软件包列表: 打开终端,并执行以下命令来更新您的系统软件包列表: sudo apt update安装依赖包&#xff…

(转)一篇令所有游戏圈的兄弟汗颜的文章

一篇让我看了一个小时的文章,看到了自己的粗浅,有些问题也许只有加入游戏行业了才更有体会1、无休止的抄袭回想起上个世纪末,华人游戏圈还处于原始阶段,那时候随便竖几条枪占个山头就敢说自己是做游戏的,拿出来的东西勉…

mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)

1、前言 前面讲解了mybatis的一级、二级缓存。一级然并卵(spring整合后),二级还是有用的。我们现在来看看用ehcache来维护管理二级缓存。不要问我为什么,因为都这么用!!!java是框架语言&#x…

八、开发者工具和指南(四) Orchard dependencies and libraries

本文列举了Orchard项目中的依赖,和Orchard使用它们的简介.依赖的副本在源码库的lib目录中,包含了它们各自的licenses,也能在CREDITS.txt文件中看到它们的归属. Akismet 这是Orchard中的默认的垃圾保护服务. ANTLR v3 这是语言识别工具,提供了构造识别器的框架,解释程序,编译器和…

如何使用三态工作流 - [MOSS 2007应用日记]

MOSS 2007的一个很重要的功能就是提供了工作流,让我们可以结合工作流来实现各种需求,系统提供了几种默认的工作流供大家使用,“三态工作流”就是默认的一种。 现在通过一个模拟实验来看看怎么使用“三态工作流”:在行政部子网站下…

微信小程序遍历wx:for,wx:for-item,wx:key

微信小程序中wx:for遍历默认元素为item,但是如果我们设计多层遍历的时候我们就需要自定义item的字段名以及key的键名 wx:for"{{item.goodsList}}" wx:for-item"ite" wx:for-key"idx" wx:key"{{idx}}" 这样子元素就被设置成…

Linux下samba服务的错误处理

错误显示:解决方法:在/etc/samba/smb.conf 文件里有一行自己修改过hosts allow 192.168.x.x x.x.x.x在这里加上自己的充当客户端主机的ip地址即可转载于:https://blog.51cto.com/luochen2015/1693712

[POJ2420 A Star not a Tree?]

[关键字]:随机化搜索 模拟退火 [题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离。 // [分析]:同样是随机化的方法,只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后…

推荐:iReaper - MSDN中文Webcast下载程序

看MS的webcast还真是麻烦,我混了这么久,都没搞清楚,这东西在MS那里怎么看的.老是想看,但不知道怎么进去看.但用这个小软件下载看,就很方便.http://myron.cnblogs.com/ 转载于:https://www.cnblogs.com/shiningrise/archive/2008/06/15/1222270.html

前端常用正则

手机号正则 const phoneReg/^1[3456789]\d{9}$/; 邮编正则 const emailReg/^[0-9]{6}$/; 整数正则(大于0) const zsReg/^(([1-9]\d)|[1-9])?$/; 小数点后保留2位 const limitReg/(^[1-9]([0-9])?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])…