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 相关文章推荐
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
jquery 回车事件实现代码
Aug 23 Javascript
javascript倒计时功能实现代码
Jun 07 Javascript
详解Javascript动态操作CSS
Dec 08 Javascript
jquery+css实现下拉列表功能
Sep 03 jQuery
微信小程序文字显示换行问题
Jul 28 Javascript
谈谈IntersectionObserver懒加载的具体使用
Oct 15 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
DWR内存兼容及无法调用问题解决方案
Oct 16 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
关于Js中new操作符的作用详解
Feb 21 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
php短信接口代码
2016/05/13 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
python 堆和优先队列的使用详解
2019/03/05 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python安装pil库方法及代码
2019/06/25 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
python代码实现图书管理系统
2020/11/30 Python
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
商务专员岗位职责
2013/11/23 职场文书
代领毕业证委托书
2014/08/02 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
初一英语教学反思
2016/02/15 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书