js正则表达式惰性匹配和贪婪匹配用法分析


Posted in Javascript onDecember 26, 2016

本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法。分享给大家供大家参考,具体如下:

在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础:

写法基础:

①不需要双引号,直接用//包含 => /wehfwue123123/.test();

②反斜杠\表示转义 =>/\.jpg$/

③用法基础:.test(str);

语法:

①锚点类

/^a/=>以"a"开头

/\.jpg$/=>以".jpg"结尾

②字符类

[abc]:a或b或c

[0-9]:一个数字

[a-z]:一个字母

.    :任意字符

③元字符

^:在[]里面用表示非,在[]外面用表示开头

\d:[0-9]

\s:空白符

\w:[A-Za-z0-9_]

\D:[^\d]-非数字

\S:非空白符

④量词

{m,n}:m到n次

元字符表示:

*:{0,}

?:{0,1}

+:{1,}

难点:贪婪模式/惰性模式

贪婪模式——在匹配成功的前提下,尽可能多的去匹配

惰性模式——在匹配成功的前提下,尽可能少的去匹配

解释一:码文并茂

使用正则表达式中的贪婪、惰性的量词可以控制表达式匹配过程,我们知道量词?、*、+的意义,可以指定相关模式出现的次数,默认的情况下我们使用的是贪婪量词,它的匹配过程是从整个字符串开始查看,如果不匹配就去掉最后一个,再看看是否匹配,如此循环一直到匹配或字符串空为止,如:

vars ="abbbaabbbaaabbb1234";
varre1=/.*bbb/g;//*是贪婪量词
re1.test(s);

这个匹配过程将从整个字符串开始:

re1.test("abbbaabbbaaabbb1234");//false ,则去掉最后一个字符4再继续
re1.test("abbbaabbbaaabbb123");//false ,则去掉最后一个字符3再继续
re1.test("abbbaabbbaaabbb12");//false ,则去掉最后一个字符2再继续
re1.test("abbbaabbbaaabbb1");//false ,则去掉最后一个字符1再继续
re1.test("abbbaabbbaaabbb");//true ,结束

在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束,以上面的为例子。

vars ="abbbaabbbaaabbb1234";
varre1=/.*?bbb/g;//*?是惰性量词
re1.test(s);

它的匹配过程如下:

re1.test("a");//false, 再加一个
re1.test("ab");//false, 再加一个
re1.test("abb");//false, 再加一个
re1.test("abbb");//true, 匹配了,保存这个结果,再从下一个开始
re1.test("a");//false, 再加一个
re1.test("aa");//false, 再加一个
re1.test("aab");//false, 再加一个
re1.test("aabb");//false, 再加一个
re1.test("aabbb");//true, 匹配了,保存这个结果,再从下一个开始

小结:

默认的贪婪匹配是从后往前匹配,最大长度的匹配,惰性匹配就是在量词后面加个?从字符串的前面开始匹配,最小长度的匹配

Javascript 相关文章推荐
为数据添加append,remove功能
Oct 03 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
Jan 15 Javascript
window.opener用法和用途实例介绍
Aug 19 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
Bootstrap的modal拖动效果
Dec 25 #Javascript
原生ajax处理json格式数据的实例代码
Dec 25 #Javascript
JS异步文件分片断点上传的实现思路
Dec 25 #Javascript
BootStrop前端框架入门教程详解
Dec 25 #Javascript
半个小时学json(json传递示例)
Dec 25 #Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 #Javascript
JS如何生成一个不重复的ID的函数
Dec 25 #Javascript
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
Sea.JS知识总结
2016/05/05 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python中Unittest框架的具体使用
2019/08/27 Python
用python绘制樱花树
2020/10/09 Python
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
代理协议书范本
2014/04/22 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书