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 相关文章推荐
ExtJS 2.0 实用简明教程之布局概述
Apr 29 Javascript
JavaScript 设计模式之组合模式解析
Apr 09 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
jQuery插件实现静态HTML验证码校验
Nov 06 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
Apr 14 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
JS document内容及样式操作完整示例
Jan 14 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
给多个地址发邮件的类
2006/10/09 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
php判断表是否存在的方法
2015/06/18 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
js直接编辑当前cookie的脚本
2008/09/14 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
微信小程序实现点击图片放大预览
2019/10/21 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
HTML的form表单和django的form表单
2019/07/25 Python
django框架forms组件用法实例详解
2019/12/10 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
接待员岗位责任制
2014/02/10 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
学校督导评估方案
2014/06/10 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
施工现场安全管理制度
2015/08/05 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书