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 相关文章推荐
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
Jan 24 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
jQuery - AJAX load() 实例用法详解
Aug 27 jQuery
详解从vue-loader源码分析CSS Scoped的实现
Sep 23 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
Dec 17 Javascript
node事件循环和process模块实例分析
Feb 14 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 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
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
微信小程序canvas实现签名功能
2021/01/19 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python中itertools模块用法详解
2014/09/25 Python
python写日志封装类实例
2015/06/28 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
python 堆和优先队列的使用详解
2019/03/05 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
车辆安全检查制度
2014/01/12 职场文书
教师现实表现材料
2014/02/14 职场文书
幼儿园运动会口号
2014/06/07 职场文书
七夕活动策划方案
2014/08/16 职场文书
学年个人总结范文
2015/03/05 职场文书
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers