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 相关文章推荐
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
JavaScript获取当前url根目录(路径)
Jun 17 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
Angular利用trackBy提升性能的方法
Jan 26 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
Javascript 解构赋值详情
Nov 17 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
javascript定时变换图片实例代码
2013/03/17 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
Vue.js基础知识小结
2017/01/13 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
详解python中requirements.txt的一切
2017/03/03 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
python中的colorlog库使用详解
2019/07/05 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
母校寄语大全
2014/04/10 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
法律意见书范文
2015/05/20 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang