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 相关文章推荐
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
JavaScript的React框架中的JSX语法学习入门教程
Mar 05 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
针对JavaScript中this指向的简单理解
Aug 26 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
js实现数组内数据的上移和下移的实例
Nov 14 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 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
日本十大惊悚动漫
2020/03/04 日漫
php 保留小数点
2009/04/21 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Django实现学生管理系统
2019/02/26 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
用python计算文件的MD5值
2020/12/23 Python
学习十八大精神心得体会
2013/12/31 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
医学生个人求职信范文
2014/02/07 职场文书
诚信教育主题班会
2015/08/13 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android