想问问这段正则,有懂的可以解释一下吗
/^{([^,]+),([^}]+)\}$/
如果有对应处理的数据来分析,其实会好些,没有就只能盲猜功能了。/^{([^,]+),([^}]+)\}$/
首先看头看尾,^{
表示以{
开头,}$
表示以}
结尾,得出结论它希望匹配的是'{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