Meh*_*dad 5 javascript regex quantifiers
为什么"hello".match(/^(.*?)?/)[0]评估为 to"h"而不是 to ""?
换句话说,为什么遵循(.*?)带有零或一量词的惰性表达式会?使其变得有点贪婪?
并不是内部量词变得贪婪,而是它试图避免匹配完全空的部分。这就是为什么.*still 只匹配第一个字符,而不匹配整个单词。
这是 JavaScript 正则表达式的一个奇怪之处。带有贪婪量词的空匹配部分的处理方式与其他常见的正则表达式引擎略有不同。其真正原因错综复杂。请参阅:贪婪在 JavaScript 中表现不同?
解决方法是使外部量词也变得惰性,并附加一个问号:
"hello".match(/^(.*?)??/)[0] // output: ""
Run Code Online (Sandbox Code Playgroud)