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 tab标签页的制作
May 10 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
javascript日期计算实例分析
Jun 29 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
详解vue数据渲染出现闪烁问题
Jun 29 Javascript
js中null与空字符串""的区别讲解
Jan 17 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
js实现点赞效果
Mar 16 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
Mar 17 Javascript
谈谈node.js中的模块系统
Sep 01 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
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
利用Python开发实现简单的记事本
2016/11/15 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python实现自主查询实时天气
2018/06/22 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
XML文档面试题
2015/08/05 面试题
物流业务员岗位职责
2014/02/08 职场文书
中式婚礼主持词
2014/03/13 职场文书
先进党员事迹材料
2014/12/24 职场文书
房屋认购协议书
2015/01/29 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书