/(?:([^:;\(\[]*):)?(.*)/
可以拆分解释下吗?
如一楼解释,有两个捕获组,第一个捕获组里面的括号内容([^:;\(\[]*)
指匹配不包含:;([
字符的任意个字符,加上前面的 ?:
表示只匹配括号里面的内容但是不捕获,最后是匹配一个:
,(?:([^:;\(\[]*):)?
, 匹配一个不包含:;([
这四个符号的字符串再加一个:
零次或一次;
第二个捕获组就是捕获任意字符串,就是说如果第一个捕获组匹配失败,那么第二个捕获组会获取整个字符串,
如果第一个捕获组成功,结果是捕获两个字符串,一个是:
之前的,一个是:
之后的;
举例:
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"]
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
第一部分:(?:XXXXX:)?
第二部分:(.*)
第一部分,非匹配一个或零个XXXXX:,XXXXX匹配的是零个或多个这些:;([符号之外的任意字符,这是第一个捕获组捕获的。
第二部分就是捕获零个或多个任意字符。