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 相关文章推荐
js资料prototype 属性
Mar 13 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
Jul 30 Javascript
jquery ajax请求实例深入解析
Nov 26 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
浅谈js函数的多种定义方法与区别
Nov 29 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
js前端设计模式优化50%表单校验代码示例
Jun 21 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中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
使用tensorflow实现线性svm
2018/09/07 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
两道JAVA笔试题
2016/09/14 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
公司请假条格式
2014/04/11 职场文书
初三开学计划书
2014/04/27 职场文书
预防煤气中毒方案
2014/06/16 职场文书
庆七一主持词
2015/06/29 职场文书
女性健康讲座主持词
2015/07/04 职场文书
《山中访友》教学反思
2016/02/24 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python