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 相关文章推荐
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
localStorage实现便签小程序
Nov 28 Javascript
iscroll.js滚动加载实例详解
Jul 18 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
Node.js API详解之 os模块用法实例分析
May 06 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获取mysql版本的几种方法小结
2008/03/25 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP实现添加购物车功能
2017/03/06 PHP
匹配任意字符的正则表达式写法
2010/04/29 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
python实现将文本转换成语音的方法
2015/05/28 Python
在python里面运用多继承方法详解
2019/07/01 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
庆中秋节主题活动方案
2014/02/03 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
秋季运动会广播稿
2014/02/22 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
正规欠条模板
2015/07/03 职场文书
2016年公司新年寄语
2015/08/17 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Python机器学习之逻辑回归
2021/05/11 Python