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中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
jquery $(this).attr $(this).val方法使用介绍
Oct 08 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
jQuery关键词说明插件cluetip使用指南
Apr 21 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
再谈javascript注入 黑客必备!
Sep 14 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
vue组件学习教程
Sep 09 Javascript
js正则表达式简单校验方法
Jan 03 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP基本语法总结
2014/09/06 PHP
php中explode函数用法分析
2014/11/15 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
用js遍历 table的脚本
2008/07/23 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
javascript生成大小写字母
2015/07/03 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
Python中的yield浅析
2014/06/16 Python
在Python中使用SQLite的简单教程
2015/04/29 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
实施意见格式范本
2015/06/05 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书