在JS权威里看到一个正则表达式不太理解,请教一下

想问问这段正则,有懂的可以解释一下吗

 /^{([^,]+),([^}]+)\}$/ 

如果有对应处理的数据来分析,其实会好些,没有就只能盲猜功能了。

/^{([^,]+),([^}]+)\}$/ 首先看头看尾,^{表示以{开头,}$表示以结尾,得出结论它希望匹配的是'{xxxx}'长这样的字符串,那把正则稍微简化下就是这样{(),()},小括号里面的内容先不看,两个小括号中间是有个逗号的,那就是它希望匹配的字符串长'{xxxx,yyyy}'这样,接着分析第一个小括号,[^,]就表示匹配除了逗号的一个字符,[^,]+就表示匹配多个(>1)除了逗号的字符,那结合前面的两个小括号中间是有个逗号的,那就得出结论'{xxxx,yyyy}'这里的xxxx里面是没有逗号的,因为第一个小括号匹配的是非逗号的多个字符;好接下来分析第二个小括号([^}]+),同理[^}]这就是匹配非}的一个字符,[^}]+就是匹配多个非的字符,因为前面说了期望匹配的字符串大概长'{xxxx,yyyy}'这样,所以第二个小括号不要应该就是只取yyyy这个数据,好大概分析完了,剩下就是用途,长成这样的数据{xxxx,yyyy},那多半是字符串的对象,那我就假设匹配的字符串长'{aa:1,bb:2}',再回到正则/^{([^,]+),([^}]+)\}$/ ,这里前后两个小括号其实可以不用加的,功能没影响,它加上了意味着它想取出来,在正则里面使用了括号的,等下使用match时就可以获取到相应模块值,如

var word = '{aa:1,bb:2}'
var data = word.match(/^{([^,]+),([^}]+)}$/)
console.log(data[1])   // aa:1
console.log(data[2]) // bb:2