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 相关文章推荐
基础的prototype.js常用函数及其用法
Mar 10 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
Sep 05 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
mock.js模拟前后台交互
Jul 25 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 Javascript
js+html实现点名系统功能
Nov 05 Javascript
JS实现的雪花飘落特效示例
Dec 03 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
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
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
《王二小》教学反思
2014/02/27 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
婚前财产公证书
2014/04/10 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
安全环保标语
2014/06/09 职场文书
公司门卫工作职责
2014/06/28 职场文书
学党史心得体会
2014/09/05 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年业务工作总结
2014/11/17 职场文书
公积金接收函格式
2015/01/30 职场文书