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 相关文章推荐
11个用于提高排版水平的基于jquery的文字效果插件
Sep 14 Javascript
js解析与序列化json数据(三)json的解析探讨
Feb 01 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
JS中的BOM应用
Feb 02 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
Node错误处理笔记之挖坑系列教程
Jun 05 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
Aug 01 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 Javascript
jQuery实现可以扩展的日历
Dec 01 jQuery
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 水平的题目
2007/05/30 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php的扩展写法总结
2019/05/14 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
javascript的函数作用域
2014/11/12 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
vscode自定义vue模板的实现
2021/01/27 Vue.js
Python之eval()函数危险性浅析
2014/07/03 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
基于Python的关键字监控及告警
2017/07/06 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
python可视化实现KNN算法
2019/10/16 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
《最可爱的人》教学反思
2014/02/14 职场文书
申论倡议书范文
2014/05/13 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
公司授权委托书范文
2014/09/21 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
创业计划书之废品回收
2019/09/26 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers