为什么懒惰量词后面跟着问号会变得贪婪?



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

换句话说,为什么跟随懒惰表达式(.*?)零或一量词?让它有点贪婪?

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

这是JavaScript正则表达式的一个奇怪之处。带有贪婪量词的空匹配部分的处理方式与其他常见的正则表达式引擎略有不同。造成这种情况的真正原因是错综复杂的。参见:贪婪在 JavaScript 中的行为不同?

解决方法是使外部量词也延迟,并附加一个问号:

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

最新更新