JS正则表达式从入门到入土(6)—— 贪婪模式与非贪婪模式
贪婪模式
之前说了正则的量词,但是量词会带来一个到底该匹配哪个的问题。
如下正则表达式:
\d{3,6}
这个正则表达式是匹配3到6个数字,但是当这个正则表达式被用来匹配12345678这个字符串,到底该匹配三个数字还是6个数字,亦或者是都不是?
可以先试试:
let text = '12345678'
let reg = /\d{3,6}/g
text.replace(reg, 'X')		// X78
可以看到该正则将123456六个数字替换为了X,也就是说,在正常模式下,正则表达式会尽可能多的匹配。
正常情况下,正则表达式采用贪婪模式,即,尽可能多的匹配。
非贪婪模式
但是,有时我们需要正则表达式尽可能少的匹配,也就是说,一旦成功匹配不再继续尝试,这就是非贪婪模式。那么,如何进入非贪婪模式呢?
做法很简单,在量词后加上?即可。
let text = '12345678'
let reg = /\d{3,6}?/g
text.replace(reg, 'X')		// X45678
可以发现,在非贪婪模式下,该正则只匹配了123,即最少匹配。
JS正则表达式从入门到入土(6)—— 贪婪模式与非贪婪模式的更多相关文章
- JS正则表达式从入门到入土(7)—— 分组
		
分组 在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串Byron连续出现3次的情况. 有些人会直接写: Byron{3} 但是,这种情况仅仅会匹配Byro加上三个n ...
 - JS正则表达式从入门到入土(10)—— 字符串对象方法
		
字符串对象方法 search方法 String.prototype.search(reg) search方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,方法返回第一个匹配结果的 ...
 - JS正则表达式从入门到入土(9)—— test方法以及它的那些坑
		
test方法 test方法介绍 RegExp.prototype.test(str) test方法用于测试字符串参数中是否存在匹配正则表达式模式的字符串 test方法的使用 let reg = /\w ...
 - JS正则表达式从入门到入土(8)—— REGEXP对象属性
		
对象属性 常用对象属性主要有以下几种: 1.global: 是否全文搜索,默认false 2.ignore case:是否大小写敏感,默认是false 3.multiline:多行搜索,默认值是fal ...
 - JS正则表达式从入门到入土(4)—— 预定义类与边界
		
预定义类 正则表达式提供预定义类来匹配常见的字符类 字符 等价类 含义 . [^\r\n] 除了回车符和换行符以外的所有字符 \d [0-9] 数字字符 \D [^0-9] 非数字字符 \s [\t\ ...
 - JS正则表达式从入门到入土(3)—— 范围类
		
范围类 在使用正则表达式时,很多时候,我们会想要匹配a~z的所有字母,很多人想到,可以使用字符类[abcdefg...z],但是,这种方法需要输入所有需要匹配的字母.那么,有没有简单点的方法呢? 所幸 ...
 - JS正则表达式从入门到入土(2)—— 元字符和字符类
		
元字符和字符类 元字符 正则表达式由两种基本字符类型组成: 1.原义(正常)文本字符:代表本身含义的字符,如:a.b.c.1.2.3等. 2.元字符:元字符是在正则表达式中有特殊含义的非字母字符,如\ ...
 - JS正则表达式从入门到入土(1)—— REGEXP对象
		
REGEXP对象 JavaScript通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象. 1.字面量 2.构造函数 字面量 字面量是直接通过/.../创建RegExp对象实例. ...
 - JS正则表达式从入门到入土(5)—— 量词
		
量词 很多时候,我们需要匹配一个连续出现很多次字符的字符串,比如,我们要匹配一个连续出现20次的数字的字符串,按照之前的写法: \d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d ...
 
随机推荐
- TArray<uint8>转FString
			
void ARamaUDPReceiver::Recv(const FArrayReaderPtr& ArrayReaderPtr, const FIPv4Endpoint& EndP ...
 - SQL:CASE WHEN ELSE END用法
			
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4......... ...
 - Dart异步与消息循环机制
			
Dart与消息循环机制 翻译自https://www.dartlang.org/articles/event-loop/ 异步任务在Dart中随处可见,例如许多库的方法调用都会返回Future对象来实 ...
 - Python--进阶处理5
			
# 使用路径名来获取文件名,目录名,绝对路径等import ospath = r'F:\myProject\lean\a'# Get the last component of the pathbas ...
 - CEF3 HTML5 audio标签为什么不能播放mp3格式的音频文件
			
CEF3 HTML5 audio标签 为什么不能播放mp3格式的音频文件 原因略. 解决方法: 找一个最新版的chrome ,我用的是24版本.路径 C:\Documents and Sett ...
 - transform的妙用---实现div不定宽高垂直水平居中
			
transform的兼容性 transform的兼容性还是比较乐观的.IE9以下不兼容,IE9支持代替的-ms-transform属性不过只支持2D转换. 谷歌和Safari支持代替的-webkit- ...
 - Xcode6 部署iphone4s出现的问题 No architectures to compile for
			
手贱升级到了Xcode6.结果一打开来就爆了各种错误换个警告; 各种百度和谷歌,终于搞定了,然后插上4S,结果还是报错. 解决: 1.找到 Build Settings 2.点击 Architectu ...
 - 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
			
解决方法一: SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 优点:不用重启mysql 缺点:重启mysql后还会 ...
 - 品友互动大数据平台的技术演化 https://www.sohu.com/a/191202836_99982360
			
品友互动大数据平台的技术演化
 - nodejs(二)
			
nodejs第二章节 回调函数 Node.js 异步编程的直接体现就是回调 异步编程依托于回调来实现 例子1:http服务器回调 var http = require(“http”);//引入一个ht ...