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 相关文章推荐
一段非常简单的让图片自动切换js代码
Nov 10 Javascript
jquery.ui.progressbar 中文文档
Nov 26 Javascript
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
详解使用nvm安装node.js
Jul 18 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
Aug 14 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 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
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python饼状图的绘制实例
2019/01/15 Python
使用python画社交网络图实例代码
2019/07/10 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
什么是Python中的匿名函数
2020/06/02 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
企业文化演讲稿
2014/05/20 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
未婚证明格式
2015/06/15 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL