/(?:([^:;\(\[]*):)?(.*)/
Kannst du es im Detail erkl?ren?
第一部分:(?:XXXXX:)?
第二部分:(.*)
第一部分,非匹配一個(gè)或零個(gè)XXXXX:,XXXXX匹配的是零個(gè)或多個(gè)這些:;([符號(hào)之外的任意字符,這是第一個(gè)捕獲組捕獲的。
第二部分就是捕獲零個(gè)或多個(gè)任意字符。
如一樓解釋,有兩個(gè)捕獲組,第一個(gè)捕獲組里面的括號(hào)內(nèi)容([^:;\(\[]*)
指匹配不包含:;([
字符的任意個(gè)字符,加上前面的 ?:
表示只匹配括號(hào)里面的內(nèi)容但是不捕獲,最后是匹配一個(gè):
,(?:([^:;\(\[]*):)?
, 匹配一個(gè)不包含:;([
這四個(gè)符號(hào)的字符串再加一個(gè):
零次或一次;
第二個(gè)捕獲組就是捕獲任意字符串,就是說(shuō)如果第一個(gè)捕獲組匹配失敗,那么第二個(gè)捕獲組會(huì)獲取整個(gè)字符串,
如果第一個(gè)捕獲組成功,結(jié)果是捕獲兩個(gè)字符串,一個(gè)是:
之前的,一個(gè)是:
之后的;
舉例:
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"]