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 相关文章推荐
一实用的实现table排序的Javascript类库
Sep 12 Javascript
jquery实现excel导出的方法
Apr 04 Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 Javascript
JavaScript实现的简单拖拽效果
Jun 01 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
浅谈JavaScript中小数和大整数的精度丢失
May 31 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
Aug 02 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
使用vue-resource进行数据交互的实例
Sep 02 Javascript
基于JS实现视频上传显示进度条
May 12 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
基于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
ftp类(myftp.php)
2006/10/09 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python最长公共子串算法实例
2015/03/07 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
学校节能减排方案
2014/06/13 职场文书
创先争优宣传标语
2014/10/08 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
医院营销工作计划
2015/01/16 职场文书
婚礼父母致辞
2015/07/28 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
《少年闰土》教学反思
2016/02/18 职场文书