javascript的正则匹配方法学习


Posted in Javascript onFebruary 24, 2016

javascript中正则匹配有3个方法,match,exec,test。这些方法都跟字符串和RegExp对象有关,但使用场景不一样,容易混淆。match是字符串的一个方法,接收一个RegExp对象做为参数,其他的是RegExp对象的方法,接收一个字符串参数。

var str = 'abcdef12ab34cd56ef';
var patt = new RegExp('ab'); //主意是非全局匹配

var ret_test = patt.test(str);
console.log(ret_test);
var ret_match = str.match(patt);
console.log(ret_match);
var ret_exec = patt.exec(str);
console.log(ret_exec);

1. regExp.test(string)

该方法最简单,在string中找到匹配regExp的字符串则返回true,没找到匹配的字符串则返回false

2. regExp.exec(string)

该方法稍微复杂些。

当regExp没有全局标志时,其返回值为字符串数组:数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。在上例中如果 patt = new RegExp('f(\\d)(\\d)','g');则 ret_exec 将为字符串数组:['f12','1','2']。

当regExp有全局标志(g选项)时,返回值为第一个匹配到的字符串组成的数组,数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。同时主意,regExp对象的一个属性(lastIndex)被改变了,lastIndex被设置为那个字符串最后一个字符所在的位置,其的后面的那个位置(在上例中是lastIndex = 2)。当再次调用 regExp.exec(string)时,搜索范围将从regExp.lastIndex开始搜索。此时返回值仍然是单元素的字符串数组,lastIndex = 10 。我们经常用while循环来遍历字符串中的匹配:

var patt = new RegExp('ab', 'g'),
str = 'abcdef12ab34cd56ef', ret;
while((ret = patt.exec(str))!=null) {
  console.log(ret);
}
//输出
['ab']
['ab']

exec方法返回的不是标准的数组,应该算是一个类数组,因为它还有2个属性:input是输入的字符串,index是当前匹配的字符串第一个字符在input中的位置。

3. string.match(regExp)

该方法比exec简单一些,因为它不用考虑regExp的lastIndex属性。同样,也需要分两种情况(全局匹配与非全局匹配)

当regExp没有全局标志时,返回值与调用exec一样,返回一个数组,数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。主意该数组同时还有2个属性:input是输入的字符串string,index是当前匹配的字符串第一个字符在input中的位置。

当regExp有全局标志(g选项)时,很简单,也符合我们的理解:返回所有匹配到的字符串组成的数组。这是标准数组,没有input属性,也没有index属性。返回值数组中除了匹配到的字符串没有任何其他信息。

从上面的分析看出,如果你只是想判断字符串是否匹配某个正则表达式,就用test方法。如果想一次性取出所有匹配到的字符串,或者只找到第一个匹配的字符串就可以,就用match方法。如果你想多次匹配,而且需要知道每个匹配到的字符串在原始字符串中的位置,或者正则表达式中还有子表达式信息需要关注,就用exec方法。

以上就是javascript正则匹配的多种方法介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jQuery学习笔记之jQuery选择器的使用
Dec 22 Javascript
fancybox modal的完美解决(右上的X)
Oct 30 Javascript
js动态生成指定行数的表格
Jul 11 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
Mar 15 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
Node.js连接Sql Server 2008及数据层封装详解
Aug 27 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
关于layui flow loading占位图的实现方法
Sep 21 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 #Javascript
JavaScript设计模式经典之命令模式
Feb 24 #Javascript
JavaScript设计模式经典之工厂模式
Feb 24 #Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 #Javascript
JavaScript的设计模式经典之代理模式
Feb 24 #Javascript
jQuery实现验证年龄简单思路
Feb 24 #Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 #Javascript
You might like
可以在线执行PHP代码包装修正版
2008/03/15 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python 列表list使用介绍
2014/11/30 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
jupyter notebook实现显示行号
2020/04/13 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
客户代表自我评价范例
2013/09/24 职场文书
汽车驾驶求职信
2013/10/25 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
公司人事管理制度
2015/08/05 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
在redisCluster中模糊获取key方式
2021/07/09 Redis