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类,兼容IE及Firefox
Jun 23 Javascript
jQuery UI 实现email输入提示实例
Aug 15 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
Bootstrap精简教程
Nov 27 Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
vue构建单页面应用实战
Apr 10 Javascript
微信小程序 生命周期函数详解
May 24 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Python中的下划线详解
2015/06/24 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
深入学习python多线程与GIL
2019/08/26 Python
python excel转换csv代码实例
2019/08/26 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
大学生秋游活动方案
2014/02/17 职场文书
《三峡》教学反思
2014/03/01 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
教师网络培训心得体会
2016/01/09 职场文书
导游词之无锡古运河
2019/11/14 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Css预编语言及区别详解
2021/04/25 HTML / CSS