用于匹配多个实例的JavaScript Regex

时间:2017-05-17 15:52:33

标签: javascript regex

给定以下字符串,什么正则表达式匹配花括号内的(包括)括号中的子串?

var string = "{name: Jackie} works at {company: Google}";

我尝试过使用string.match(/{.*}/gi),但会将整个字符串作为匹配项返回:

Array [ "{name: Jackie} works at {company: Google}" ]

预期输出:

Array [ "{name: Jackie}", "{company: Google}" ]

2 个答案:

答案 0 :(得分:2)

你的表达中错过了?。您的正则表达式问题({.*})将匹配{,然后直到最后一次出现}.*是贪婪的,?中的{.*?}使其变得懒惰。

Regex demo

正则表达式: /{.*?}/g

  

1。 {.*?}这将匹配{,直到第一次出现}

答案 1 :(得分:1)

{。*}将{匹配到字符串的末尾,然后备份到最后}。所以它只是匹配从第一个{到最后}。的?将使多匹配延迟,使其从第一个{到下一个},但它将在{to}的每一步中尝试匹配},并在每次失败时回溯一点,因此它还会做更多的工作。通过匹配所有NOT}(如{[^\}]*}),你匹配完全相同的东西,但没有所有的后退跟踪。完全匹配你想要的东西总是更好,这样你就不会对它匹配的东西感到惊讶。 (因为。*?}无法匹配},不要让它尝试)