js正则表达exec与match的区别说明
发布时间:2024-04-17 10:25:26
以前用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则于全局相关联,当定义为非全局,两者执行结果相同
猜你喜欢
- 上文: 《IE7的web标准之道——1:前言(兼目录)》IE历来被web标准的拥护者所诟病,而当FireFox横空出世以后,更多的网页制作者
- 什么是 NFT?NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割、不可替代、独一无二等特点。
- 场景针对园区停车信息,需要对各个公司提供的停车数据进行整合并录入自家公司的大数据平台数据的录入无外乎就是对数据的增删改查下面上一个常规的写法
- 服务:# chkconfig --list 列出所有系统服务# chkconfig --list | grep o
- mysql> select binary 'ABCD'='abcd' COM1, 'ABCD&
- 逢七拍腿游戏几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿。现在从1数到99,假设每个人都没有错,计
- 1、首先要配好vs开发工程注意版本;我这使用32位的python那么我vs工程这边也选择32位的编译环境去配置注意点;需要将python安装
- 本文实例为大家分享了Python求多幅图像栅格值的平均值,供大家参考,具体内容如下本程序所采用的方法并不是最优方法,ARCGIS已经提供了相
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- 本文实例讲述了Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法。分享给大家供大家参考。具体如下:这个东东本来是做来给公司数据
- 类的定义 类定义有三种基本方法,1、创建并能返回特定类型的对象的函数(工厂函数),例如:function Co(){ var o = new
- 1 索引基础1.1 索引作用在MySQL中,查找数据时先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行,假如要运行下面查询语句
- 本文实例讲述了Javascript与PHP验证用户输入URL地址是否正确的方法,分享给大家供大家参考。具体方法如下:1.javascript
- 我的SQL Server2005 一直正常使用但昨天出现了错误,如图。经过上网查,网上说的办法试了好多都没有解决这个问题。在经过多次的摸索后
- 简介Node2vec是一种用于图嵌入(Graph Embedding)的方法,可用于节点分类、社区发现和连接预测等任务。实现过程
- 正则表达式的定义在编写处理字符串的程时,经常会遇到在一段文本中查找符合某些规则的字符串的需求,正则表达式就是用于描述这些规则的工具,换句话说
- 本文实例讲述了python监控网站运行异常并发送邮件的方法。分享给大家供大家参考。具体如下:这是一个简单的python开发的监控程序,当指定
- 我们可以用动态产生变量的方法,从表格里捕捉数据,动态地创造“剥离”变量引号并且“清理”它,见下列代码,我们只需键入变量名称,选择 query
- 实际运用中当我用SqliteAdmin以及SQLite Expert Professional 2软件新建Sqlite数据库的时候在ASP.
- Pycharm创建的项目,使用了虚拟环境,对库的版本进行管理;有些项目的对第三方库的版本 要求不同,可使用虚拟环境进行管理直接想通过pip命