Javascript Regexp匹配可选组,除非它是';里面有东西

Javascript Regexp匹配可选组,除非它是';里面有东西,javascript,regex,Javascript,Regex,我正在玩这个regexp: 以下所有字符串应匹配。但是,如果第二组括号(可选)中包含任何内容,则regexp不应匹配任何内容 // Match ![] ![caption] ![]() ![caption]() ![][] ![caption][] // No match ![][No match] ![caption][No match] ![](No match) ![caption](No match) 我仍然能够匹配在行尾有文本的示例 ![] hello ![caption][] h

我正在玩这个regexp:

以下所有字符串应匹配。但是,如果第二组括号(可选)中包含任何内容,则regexp不应匹配任何内容

// Match
![]
![caption]
![]()
![caption]()
![][]
![caption][]

// No match
![][No match]
![caption][No match]
![](No match)
![caption](No match)
我仍然能够匹配在行尾有文本的示例

![] hello
![caption][] hi there
换句话说,我只希望在没有可选组的情况下匹配,或者如果有,我只希望在可选组为空的情况下匹配(括号之间没有任何内容)


我想要的是可能的吗?

您可以使用以下正则表达式:

^!\[[^\]]*\](?:\(\)|\[\])?$
工作演示:
请注意,在第一个方括号中使用
[^\]]*
而不是
*?
,确保在第一个
]
之前匹配。另外,最好使用行开始/结束锚定
^和$

我个人更喜欢在括号中使用否定类:

^!\[([^\[\]]*)\](?:\(\)|\[\])?$

我将
(.*)
替换为
[^\[\]]*
,在开头和结尾分别添加了
^
$


也就是说,如果我正确理解了您要查找的内容,则只有第一组匹配。

问题是,行必须结束。如果我在后面添加其他内容,则没有匹配项。请提供一些您希望匹配的内容的示例,然后我可以调整它。哦,好的,很抱歉,我对您对Jerry答案的一个评论感到困惑。现在后退。类似于阿努巴瓦的回答。如果我在行尾添加任何内容,则没有匹配项。我仍然想匹配
![说明][]嘿
@JumbalayaWanton这意味着我不理解你的问题。请注意,匹配和捕获之间存在差异。捕获发生在将内容放在括号中时
(…)
,匹配发生在字符串通过正则表达式时。你的意思可能是当第二组参数中有内容时,你不想捕获
标题
?对不起,Jerry,我添加了其他示例。基本上,你给我的东西很好用,但它必须是独立的。它的前面或后面不能有任何东西。想想看,也许还可以+但是我还是很好奇。事实上,不要浪费你的时间。我想这应该适合我的需要。谢谢。好吧,我最后要指出的是,我的正则表达式是捕获第一个括号内文本的正则表达式;)
^!\[([^\[\]]*)\](?:\(\)|\[\])?$