这个问题在这里已经有了答案:
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/