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数组转json并在后台对其解析具体实现
Nov 20 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 Javascript
JS实现间歇滚动的运动效果实例
Dec 22 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
详解jquery选择器的原理
Aug 01 jQuery
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
新手入门js闭包学习过程解析
Oct 08 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 Javascript
Vant 在vue-cli 4.x中按需加载操作
Nov 05 Javascript
React配置子路由的实现
Jun 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
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
django模板结构优化的方法
2019/02/28 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
Python logging模块原理解析及应用
2020/08/13 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
2014两会学习心得:时代的发展
2014/03/17 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
离职报告范文
2014/11/04 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python