意外的非贪婪JS正则表达式结果

Han*_*ans 5 javascript regex

为什么

/<.+?> e/.exec("a <b> c <d> e")
Run Code Online (Sandbox Code Playgroud)

(意外地)回归

["<b> c <d> e"]
Run Code Online (Sandbox Code Playgroud)

代替

["<d> e"]
Run Code Online (Sandbox Code Playgroud)

非贪婪的运营商似乎什么都不做......

sp0*_*00m 3

这可以让你理解惰性运算符的作用:

/<.+?> e/.exec("a <b> c <d> e <f> e")` // -> ["<b> c <d> e", "<f> e"]
/<.+> e/.exec("a <b> c <d> e <f> e")`  // -> ["<b> c <d> e <f> e"]
Run Code Online (Sandbox Code Playgroud)

<.+?> e意思是:一旦找到a ,就找到第一个< > e

<.+> e意思是:一旦找到a ,就找到最后一个< > e

在您的具体情况下,您可以简单地使用<[^>]+> e(这更好,因为更快 - 如果可能的话,总是更喜欢X[^X]X符号而不是X.*?X符号)。