js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析


Posted in Javascript onDecember 27, 2016

本文实例分析了js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法。分享给大家供大家参考,具体如下:

最近在阅读RequireJS 2.1.15源码,源码开始处定义了一系列的变量,有4个正则表达式:

var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
jsSuffixRegExp = /\.js$/,
currDirRegExp = /^\.\//;

commentRegExp正则用来匹配JavaScript代码中的注释,/m的用法可以参考这篇文章:https://3water.com/article/101399.htm,/g的用法参考这篇文章:https://3water.com/article/101408.htm。commentRegExp中的*?这种用法之前没有见过,觉得很奇怪,因为*在正则表达式中代表0个或任意多个,?代表0个或1个,刚开始觉得*?这种写法很多余。请教同事才知道,*?这种写法是懒惰匹配。

alert(/abc([\w]*)/mg.exec("abc1abc2")[0]);//abc1abc2
alert(/abc([\w]*?)/mg.exec("abc1abc2")[0]);//abc

通过下面这段代码可以看出:最长匹配和最短匹配的差别通过这段代码可以看出:最长匹配和最短匹配的差别,一个匹配尽可能多的字符,一个匹配尽可能少的字符。一般正则表达式引擎默认都是最长匹配的,如果我们想要最短匹配,那么可以在数量修饰符后面添加一个?变成最短匹配。

/***注释1****/ var name = "aty"; /***注释2****/
var name = "aty";

通过上面这段代码可以知道,为啥requirejs匹配javascript注释要采用*?这种最短匹配模式了吧。如果我们要删除所有注释,那么应该采用最短匹配,否则var name="aty";这段代码会被替换掉。

Javascript 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
jquery下checked取值问题的解决方法
Aug 09 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
vue时间格式化实例代码
Jun 13 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 Javascript
基于jQuery实现左侧菜单栏可折叠功能
Dec 27 #Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 #Javascript
js点击任意区域弹出层消失实现代码
Dec 27 #Javascript
JS正则表达式修饰符中multiline(/m)用法分析
Dec 27 #Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 #Javascript
webuploader模态框ueditor显示问题解决方法
Dec 27 #Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 #Javascript
You might like
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
JavaScript延迟加载
2021/03/09 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
vue cli 全面解析
2018/02/28 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python3排序的实例方法
2020/10/20 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
方正Java笔试题
2014/07/03 面试题
个人简历的自荐信
2013/10/23 职场文书
制冷与电控专业应届生求职信
2013/11/11 职场文书
老师的检讨书
2014/02/23 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
国庆横幅标语
2014/10/08 职场文书
2019同学聚会主持词
2019/05/06 职场文书
创业计划书之家教中心
2019/09/25 职场文书
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers