给定以下字符串,什么正则表达式匹配花括号内的(包括)括号中的子串?
var string = "{name: Jackie} works at {company: Google}";
我尝试过使用string.match(/{.*}/gi)
,但会将整个字符串作为匹配项返回:
Array [ "{name: Jackie} works at {company: Google}" ]
预期输出:
Array [ "{name: Jackie}", "{company: Google}" ]
答案 0 :(得分:2)
你的表达中错过了?
。您的正则表达式问题({.*}
)将匹配{
,然后直到最后一次出现}
。 .*
是贪婪的,?
中的{.*?}
使其变得懒惰。
正则表达式: /{.*?}/g
1。
{.*?}
这将匹配{
,直到第一次出现}
答案 1 :(得分:1)
{。*}将{匹配到字符串的末尾,然后备份到最后}。所以它只是匹配从第一个{到最后}。的?将使多匹配延迟,使其从第一个{到下一个},但它将在{to}的每一步中尝试匹配},并在每次失败时回溯一点,因此它还会做更多的工作。通过匹配所有NOT}(如{[^\}]*}
),你匹配完全相同的东西,但没有所有的后退跟踪。完全匹配你想要的东西总是更好,这样你就不会对它匹配的东西感到惊讶。 (因为。*?}无法匹配},不要让它尝试)