/(?:([^:;\(\[]*):)?(.*)/
可以拆分解釋下嗎?
第一部分:(?:XXXXX:)?第二部:(.*)
第一部分,非匹配一個或零個XXXXX:,XXXXX匹配的是零個或多個這些:;([符號之外的任意字符,這是第一個捕獲組捕獲的。
第二部分就是捕捉零個或多個任意字元。
如一樓解釋,有兩個捕獲組,第一個捕獲組裡面的括號內容([^:;([]*)指匹配不包含:;([字符的任意个字符,加上前面的 ?:表示只匹配括号里面的内容但是不捕获,最后是匹配一个:,(?:([^:;([]*):)?, 匹配一个不包含:;([这四个符号的字符串再加一个:零次或一次;第二个捕获组就是捕获任意字符串,就是说如果第一个捕获组匹配失败,那么第二个捕获组会获取整个字符串,如果第一个捕获组成功,结果是捕获两个字符串,一个是:之前的,一个是:之後的;舉例:
([^:;([]*)
:;([
?:
:
(?:([^:;([]*):)?
var re = /(?:([^:;\(\[]*):)?(.*)/; re.exec('abc:123'); ==> ["abc:123", "abc", "123", index: 0, input: "abc:123"] re.exec('(abc:123'); ==> ["(abc:123", undefined, "(abc:123", index: 0, input: "(abc:123"]
第一部分:(?:XXXXX:)?
第二部:(.*)
第一部分,非匹配一個或零個XXXXX:,XXXXX匹配的是零個或多個這些:;([符號之外的任意字符,這是第一個捕獲組捕獲的。
第二部分就是捕捉零個或多個任意字元。
如一樓解釋,有兩個捕獲組,第一個捕獲組裡面的括號內容
([^:;([]*)
指匹配不包含:;([
字符的任意个字符,加上前面的?:
表示只匹配括号里面的内容但是不捕获,最后是匹配一个:
,(?:([^:;([]*):)?
, 匹配一个不包含:;([
这四个符号的字符串再加一个:
零次或一次;第二个捕获组就是捕获任意字符串,就是说如果第一个捕获组匹配失败,那么第二个捕获组会获取整个字符串,
如果第一个捕获组成功,结果是捕获两个字符串,一个是
:
之前的,一个是:
之後的;舉例: