JS 学习总结之正则表达式的懒惰性和贪婪性


Posted in Javascript onJuly 03, 2017

exec - > 正则的捕获

每一次捕获的时候都是先进行默认的匹配,如果没有匹配成功的,捕获的结果是null;只有有匹配的内容我们才能捕获到;

捕获的内容格式

1、捕获到的内容是一个数组,数组中的第一项是当前正则捕获的内容

index:捕获内容在字符串中开始的索引位置

input:捕获的原始字符串

var reg = /\d+/;
var str = 'woshi2016ni2017';
var res = reg.exec(str);
console.log(res) // ['2016',index:5,input:'woshi2016ni2017']
//第二次通过exec捕获的内容还是第一个"2016"
var res = reg.exec(str);
console.log(res) // ['2016',index:5,input:'woshi2016ni2017']

2、正则捕获的特点

1)、懒惰性->每一次执行exec只捕获第一个匹配的内容,在不进行任何处理的情况下,在执行多次捕获,捕获的还是第一个匹配的内容。

lastIndex:是正则每一次捕获在字符串中开始查找的位置,默认值为0

2)、如何解决懒惰性?在正则的末尾加一个修饰符"g"

修饰符:g、i、m

global(g):全局匹配

ignoreCase(i):忽略大小写匹配

multiline(m):多行匹配

var reg = /\d/g;
var str = 'woshi2016ni2017';
console.log(reg.lastIndex)
console.log(reg.exec(str))

 

原理:加了全局修饰符g,正则每一次捕获结束后,我们的lastIndex的值都变成了最新的值,下一次捕获从最新的位置开始查找,这样就可以把所有需要捕获的内容都获取到了

3)、自己编写程序获取正则捕获的所有的内容(一定不要忘了加g)

var reg = /\d+/g;
    var str = 'aswofde2015xsewde2016awdefer2017';
    var ary = [];
    var res = reg.exec(str);
    while(res){
      ary.push(res[0])
      res = reg.exec(str);
    }
    console.log(ary)//[2015,2016,2017]

4)、贪婪性   正则的每一次捕获都是按照匹配最长的结果捕获的,例如:2符合正则、2015也符合正则,我们默认捕获的是2015

5)、如何解决正则的贪婪性 ->在量词元字符后面添加一个?即可 

var reg = /\d+?/g;
    var str = 'aswofde2015xsewde2016awdefer2017';
    console.log(reg.exec(str));

?在正则中有很多的作用:

放在一个普通的元字符后面代表出现0-1次 /\d?/  ->数字可能出现也可能不出现

放在一个量词的元字符后面是取消捕获时候的贪婪性

3、字符串中的match方法->把所有和正则匹配的字符都获取到

var reg = /\d+?/g;
    var str = 'aswofde2015xsewde2016awdefer2017';
    var ary = str.match(reg);//[2,0,1,5,2,0,1,6,2,0,1,7]

虽然在当前的情况下match比我们的exec更加的简便一些,但是match中存在一些自己处理不了的问题,在分组的捕获的情况下,match只能捕获大正则匹配的内容,而对于小正则捕获的内容是无法获取的

以上所述是小编给大家介绍的JS 学习总结之正则表达式的懒惰性和贪婪性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
Javascript window对象详解
Nov 12 Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
Nov 03 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
Jul 03 #Javascript
微信小程序开发中的疑问解答汇总
Jul 03 #Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 #Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 #Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 #Javascript
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php错误日志简单配置方法
2016/07/11 PHP
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
银行职业规划书范文
2013/12/28 职场文书
网络营销计划书
2015/01/17 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
浅谈python数据类型及其操作
2021/05/25 Python