用于匹配多个实例的JavaScript正则表达式

用于匹配多个实例的JavaScript正则表达式,javascript,regex,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}" ] 您

给定以下字符串,哪个正则表达式匹配(包括)花括号内的两个子字符串

var string = "{name: Jackie} works at {company: Google}";
我尝试过使用
string.match(/{.*}/gi)
,但它会将整个字符串作为匹配项返回:

Array [ "{name: Jackie} works at {company: Google}" ]
预期输出:

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

您的表达式中缺少了
。正则表达式的问题(
{.*}
)将匹配
{
,然后匹配所有问题,直到最后出现
}
*
是贪婪的,而
{.*.}
中的
则使它变得懒惰

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

1.
{.*?}
这将匹配
{
然后全部匹配,直到第一次出现
}


{.*}将{匹配到字符串的末尾,然后备份到最后一个}。所以它只是从第一个{到最后一个}匹配。这个将使多重匹配变为惰性,以便从第一个{到下一个},但它将在从{到}的每一步尝试匹配},并在每次失败时返回一点,因此它还做了很多工作。通过匹配所有非}(如
{[^\}]*}
)的内容,您可以匹配完全相同的内容,但没有所有的回溯。最好是完全匹配你想要的东西,这样你就不会对它匹配的东西感到惊讶。(因为。*?}无法匹配},所以不要让它尝试)