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 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
网上抓的一个特效
May 11 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
关于jquery input textare 事件绑定及用法学习
Apr 03 Javascript
DOM 高级编程
May 06 Javascript
js实现a标签超链接提交form表单的方法
Jun 24 Javascript
PHP结合jQuery实现红蓝投票功能特效
Jul 22 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
JS实现随机抽取三人
Nov 06 Javascript
Element Badge标记的使用方法
Jul 27 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产生随机字符串函数
2006/12/06 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
webpack入门必知必会
2017/01/16 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
python ip正则式
2009/05/07 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
python实现最速下降法
2020/03/24 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python如何发送与接收大型数组
2020/08/07 Python
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
2014年母亲节演讲稿范文
2014/05/07 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
教师个人学习总结
2015/02/11 职场文书
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL