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 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
jQuery选择头像并实时显示的代码
Jun 27 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
VueJS事件处理器v-on的使用方法
Sep 27 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
Vue3 源码导读(推荐)
Oct 14 Javascript
vue的三种图片引入方式代码实例
Nov 19 Javascript
js实现炫酷光感效果
Sep 05 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 mongodb扩展时 需要注意的事项
2013/06/18 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP的几个常用加密函数
2016/02/03 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
如何在PHP中使用数组
2020/06/09 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python实现百度关键词排名查询
2014/03/30 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
pytorch中index_select()的用法详解
2021/01/06 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
升职自荐信范文
2013/10/05 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
小学班级口号
2014/06/09 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
自查自纠工作总结
2014/10/15 职场文书
安全责任书
2015/01/29 职场文书
城管个人总结
2015/02/28 职场文书
《窃读记》教学反思
2016/02/18 职场文书