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 学习笔记(十四) 正则表达式
Jan 22 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
Angular2里获取(input file)上传文件的内容的方法
Sep 05 Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 jQuery
vue2.0组件之间传值、通信的多种方式(干货)
Feb 10 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
vue实现滑动到底部加载更多效果
Oct 27 Javascript
JavaScript日期库date-fn.js使用方法解析
Sep 09 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php数组查找函数总结
2014/11/18 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
理解AngularJs指令
2015/12/10 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
react-native 封装选择弹出框示例(试用ios&android)
2017/07/11 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
python实现FTP循环上传文件
2020/03/20 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
上班看电影检讨书
2014/02/12 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
辞职信格式模板
2015/02/27 职场文书
求职意向书范本
2015/05/11 职场文书
安全教育培训制度
2015/08/06 职场文书
学生会主席任命书
2015/09/21 职场文书