/(?:([^:;\(\[]*):)?(.*)/
Pouvez-vous l'expliquer en détail ?
Première partie?: (?:XXXXX?:)?
Deuxième partie?: (.*)
La première partie ne correspond pas à un ou zéro XXXXX?:, XXXXX correspond à zéro ou plusieurs d'entre eux?:;([Tous les caractères autres que le symbole capturé par le premier groupe de capture.
La deuxième partie consiste à capturer zéro ou plusieurs caractères arbitraires.
Comme expliqué au premier étage, il y a deux groupes de capture. Le contenu des parenthèses dans le premier groupe de capture est après ([^:;([]*)
指匹配不包含:;([
字符的任意個字符,加上前面的 ?:
表示只匹配括號里面的內(nèi)容但是不捕獲,最后是匹配一個:
,(?:([^:;([]*):)?
, 匹配一個不包含:;([
這四個符號的字符串再加一個:
零次或一次;
第二個捕獲組就是捕獲任意字符串,就是說如果第一個捕獲組匹配失敗,那么第二個捕獲組會獲取整個字符串,
如果第一個捕獲組成功,結(jié)果是捕獲兩個字符串,一個是:
之前的,一個是:
Exemple?:
?;
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"]