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 相关文章推荐
Javascript中的数学函数集合
May 08 Javascript
javascript 得到变量类型的函数
May 19 Javascript
javascript 防止刷新,后退,关闭
Aug 07 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
通过实例解析JavaScript常用排序算法
Sep 02 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数据库密码的找回的步骤
2011/01/12 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
微信支付开发告警通知实例
2016/07/12 PHP
php微信公众号开发模式详解
2016/11/28 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
Python3实现生成随机密码的方法
2014/08/23 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python if语句知识点用法总结
2018/06/10 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python实现复制大量文件功能
2019/08/31 Python
Python关于反射的实例代码分享
2020/02/20 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
职工运动会邀请函
2014/01/19 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript