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 相关文章推荐
JavaScript中的this到底是什么(一)
Dec 09 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
JavaScript中日期函数的相关操作知识
Aug 03 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
javascript 开发之百度地图使用到的js函数整理
May 19 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
Vue实现点击显示不同图片的效果
Aug 10 Javascript
Jquery实现获取子元素的方法分析
Aug 24 jQuery
js实现小球在页面规定的区域运动
Jun 16 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php 禁止页面缓存输出
2009/01/07 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue实现记事本功能
2019/06/26 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python django事务transaction源码分析详解
2017/03/17 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
趣味体育活动方案
2014/02/08 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
开学寄语大全
2014/04/08 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
食品安全承诺书范文
2014/08/29 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
2016春季运动会前导词
2015/11/25 职场文书