分享一下js正则中惰性与贪婪
首先引入一个介绍比较详细的网站
http://www.cnblogs.com/yuaima/p/5258513.html
http://www.jb51.net/article/31491.htm
接下来是本人的简介
其实贪婪和惰性很容易理解,从字面意思我们就可以知道,所谓的"贪婪"的意思就是,如果符合要求就一直往后匹配,一直到无法匹配为止,这就是贪婪模式。所谓的惰性模式就是一旦匹配到合适的就结束,不在继续匹配下去了,下面我介绍几个例子来主要讲述一下。
首先讲述一下贪婪模式的标示符:+,?,*,{n},{n,},{n,m}.惰性模式:+?,??,*??,{n}?,{n,}?,{n,m}?;
例子一
var pattern=/8[a-zA-Z0-9]*7/;贪婪模式
var string="abc8defghij7klngon8qrstwxy7";
这时使用了贪婪模式*,表示8与8之间可有有任意多个字母,那这个正则先匹配第一个8,如果匹配到了后,就无限制的匹配后面的内容,只要后面的内容都满足[a-zA-Z0-9]就可以。一直匹配,匹配到不能再匹配为止,看紧接着后面的一个是不是7,如果不是那他就往前进一个(吐出一个看是不是7),如果不是再继续吐直到吐出7为止,然后匹配到的就是这之间的内容。所以结果匹配到的内容就是整条字符串。
var pattern=/8[a-zA-Z0-9]*?7/ig;惰性模式
var string="abc8defghij7klngon8qrstwxy7";
上面正则使用了惰性模式*?,此时匹配方式是这样的,先匹配一个8,然后在往后匹配一个字符看是不是符合[a-zA-Z0-9],如果符合,再去看紧接着后面的一个字符是不是7,如果是7就结束,如果不是就再往后匹配一个字符,看是不是符合[a-zA-Z0-9],如果符合,就再看紧接着后面的一个字符是不是7,如果是7就结束,否则,按照上面的方式依次循环下去,指导符合为止。
(2).贪婪和惰性模式还可以用另一种方式来表达。
例子二
var test="<img src="aaa/111.jpg"/><img src="aaa/112.jpg"/><img src="aaa/113.jpg"/>";
var pattern=/<img [^>]*\/>/ig;
这样也可以实现惰性模式,[^>]这个表示的就是在<img到/>之间不能出现>,所以结果可以找寻每个<img>标签
分享一下js正则中惰性与贪婪的更多相关文章
- js正则中的贪婪和非贪婪模式问题总结
var b="abeeee:eeeee:eeeeeab"; console.log(b.match(/e+\:e+/g));//["eeee:eeeee"]贪婪 ...
- JS 正则中的命名捕获分组
假设你在一段陌生的代码中看到这样一个函数: function toLocalDate(date) { return date.replace(/(\d{2})-(\d{2})-(\d{4})/, &q ...
- JS 正则中环视(断言)应用 -- 数字千分符
介绍一下顺序环视 (?=...) 和逆序环视 (?<=...) 方便不想看长文的人,如果在支持 ES2018 的环境中整数可以这样使用: String(12345678).replace(/(? ...
- js 正则表达式中的惰性匹配
今天看到了一个正则的问题,在其实使用了如下的符号: var reg = /\{(.+?)\}/g; 其中的?号让我疑惑了很久,其实他在这里是惰性匹配的意思,就是能匹配的尽量少匹配.相反,如果不加这个? ...
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...
- js正则基础总结和工作中常用验证规则
知识是需要系统的.就像js正则用了那么多次,却还是浑浑噩噩,迫切需要来一次整理,那么来吧! 基本知识 元字符 \d 匹配数字等于[0-9] \w 匹配字母.数字.下划线.中文 \s 匹配任意空白字符 ...
- js进阶正则表达式5几个小实例(原样匹配的字符在正则中原样输出)(取反^)
js进阶正则表达式5几个小实例(原样匹配的字符在正则中原样输出)(取反^) 一.总结 原样匹配的字符在正则中原样输出:var reg4=/第[1-2][0-9]章/g //10-29 取反^:var ...
- js正则实现从一段复杂html代码字符串中匹配并处理特定信息
js正则实现从一段复杂html代码字符串中匹配并处理特定信息 问题: 现在要从一个复杂的html代码字符串(包含各种html标签,数字.中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他 ...
- 今天给大家分享一下js中常用的基础算法
今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 ,b= function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a ...
随机推荐
- Kneser猜想与相关推广
本文本来是想放在Borsuk-Ulam定理的应用这篇文章当中.但是这个文章实在是太长,导致有喧宾夺主之嫌,从而独立出为一篇文章,仅供参考.$\newcommand{\di}{\mathrm{dist} ...
- C/C++ ShellExecuteEx调用exe可执行文件
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49591995 以商业的软件Enblen ...
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...
- css 清楚浮动的8种方式
清除浮动是每个 web前台设计师必须掌握的机能. css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同一时候会影响到前后标签.父级标签的位置及 width height 属性.并且相 ...
- JAVA学习第四十五课 — 其它对象API(一)System、Runtime、Math类
一.System类 1. static long currentTimeMillis() 返回以毫秒为单位的当前时间. 实际上:当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫 ...
- java9新特性-8-语法改进:钻石操作符(Diamond Operator)使用升级
1.使用说明 我们将能够与匿名实现类共同使用钻石操作符(diamond operator) 在java8中如下的操作是会报错的: 编译报错信息:'<>' cannot be used ...
- jquery判断页面元素是否存在
在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...
- C#篇(一)——字段与属性
字段和属性有什么区别? class Student { private int age; public int Age { get { return age; } set { age = value; ...
- Intellij格式化java和xml
使用Intellij的这段时间,一直在寻找一些技巧,不断提高对它的熟练度.接下来告诉大家一个小秘密,带大家体验一下Intellij半自动格式化代码的快感.那要使用这个功能还得安装一个插件--Eclip ...
- bootstrap如何自定义5列
废话少说,先上代码: <!DOCTYPE html><html> <head> <meta charset="utf-8"> < ...