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 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
关于JavaScript定义类和对象的几种方式
Nov 09 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
原生js实现日期联动
Jan 12 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
js动态生成form 并用ajax方式提交的实现方法
Sep 09 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
Bootstrap企业网站实战项目4
Oct 14 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
vue登录路由验证的实现
Dec 13 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实现的功能是显示8条基色色带
2006/10/09 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
Python 创建子进程模块subprocess详解
2015/04/08 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
Python zip()函数用法实例分析
2018/03/17 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
pandas 将索引值相加的方法
2018/11/15 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
化学教学随笔感言
2014/02/19 职场文书
教师产假请假条
2014/04/10 职场文书
小学班级特色活动方案
2014/08/31 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
网络舆情信息简报
2015/07/21 职场文书
公司晚会主持词
2019/04/17 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
Python中time标准库的使用教程
2022/04/13 Python
Ruby处理YAML和json数据
2022/04/18 Ruby