我正在玩这个正则表达式:http://regex101.com/r/dL3qX1
!\[(.*?)\](?:\(\)|\[\])?
以下所有字符串都应匹配。但是,如果第二组括号(可选)包含其中的任何内容,则正则表达式应该不匹配。
// Match
![]
![caption]
![]()
![caption]()
![][]
![caption][]
// No match
![][No match]
![caption][No match]
![](No match)
![caption](No match)
我仍然可以匹配在行尾有文字的示例。
![] hello
![caption][] hi there
换句话说,如果没有可选组,我只想要匹配,或者如果有,我只想要一个匹配,如果可选组是空的(括号之间没有)。
我可以追求的是什么?
答案 0 :(得分:1)
您可以使用此正则表达式:
^!\[[^\]]*\](?:\(\)|\[\])?$
请注意在第一个方括号中使用[^\]]*
代替.*?
,以确保匹配到第一个]
。使用行开始/结束锚^ and $
答案 1 :(得分:1)
我个人更喜欢在括号中使用否定类:
^!\[([^\[\]]*)\](?:\(\)|\[\])?$
我将(.*?)
替换为[^\[\]]*
,分别在开头和结尾添加^
和$
。
也就是说,如果我理解了你正在寻找的东西,那么只有第一套是匹配的。