/\{(.*?)\}/g ,这个正则是什么意思

这个正则是什么意思

var template="{a} + {b} = {a+b}";
template.match(/\{(.*?)\}/g);

//结果:["{a}", "{b}", "{a+b}"]

不是很懂在*后面加?代表什么,望解答~

阅读 6.6k
3 个回答

应该是贪婪匹配和惰性匹配的区别。

问号让默认的贪婪匹配变成了惰性匹配,不允许删除字符来尝试匹配,只是简单的从左到右匹配

或者说贪婪模式会尽可能的去多匹配内容

正则匹配默认采用贪婪模式,使用?采用非贪婪模式。

对于题主的文本{a} + {b} = {a+b}

  • 默认贪婪模式(不使用?)用 \{(.*)\}匹配,匹配过程为按照最长的结果,{...不管中间是有几个}{,都算内容...},结果就是"{a} + {b} = {a+b}"这一条结果。
  • 非贪婪模式(使用?) ,匹配到{a},继续匹配{b},继续匹配{a+b}。

?代表非贪婪匹配,

贪婪匹配会尽可能多地匹配内容,非贪婪匹配相反


对于同一个文本内容abcdbcd

正则ab.*d会匹配到abcdbcd
正则ab.*?d会匹配到abcd

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进