javascript - 为什么惰性量词后跟问号会变得贪婪?

标签 javascript regex quantifiers

这个问题在这里已经有了答案:





Greediness behaving differently in JavaScript?

(3 个回答)


2年前关闭。




为什么是"hello".match(/^(.*?)?/)[0]计算结果为 "h"而不是 "" ?

换句话说,为什么要遵循一个惰性表达式 (.*?)量词为零或一的 ?让它有点贪心?

最佳答案

不是内部量词变得贪婪,而是它试图避免匹配一个完全空的部分。这就是为什么 .*仍然只匹配第一个字符,而不是整个单词。

这是 JavaScript 正则表达式的一个奇怪之处。带有贪婪量词的空匹配部分的处理方式与其他常见的正则表达式引擎略有不同。真正的原因是错综复杂的。见:Greediness behaving differently in JavaScript?

一种解决方法是使外部量词也变得惰性,并带有一个额外的问号:

"hello".match(/^(.*?)??/)[0] // output: ""

关于javascript - 为什么惰性量词后跟问号会变得贪婪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138074/

相关文章:

javascript - 如何关闭 Google reCAPTCHA 本地化或锁定为英语

javascript - 将裁剪区域与非裁剪区域分开

javascript - jQuery onchange 检测

ruby - 用等效的十六进制替换字符串中的十进制数字

javascript - 用于替换中间字母的正则表达式

javascript - 为什么我的正则表达式捕获组在匹配多个部分时只捕获字符串的最后一部分?

JavaScript 正则表达式量词 : what does it mean to match zero or more times

javascript - 如何从 MD5 哈希生成(1-100)之间的随机数

regex - 带或不带逗号的整数的正则表达式

regex - 同一个正则表达式中的两个贪婪量词