注:虽然this other question可能有相同的答案,但我相信问题本身是不同的。另一个问题涉及可重新排序的可选捕获组,而这个问题涉及替代捕获组。
我想解析一个字符串,它可能包含也可能不包含围绕需要捕获的部分的 Package 括号。
例如,字符串可能看起来像这样:matchable_junk important ignoreable_junk
或者像这样:matchable_junk (important) ignorable_junk
在这两种情况下,结果都应该是important
,不带括号。
如果存在开始paren,则捕获应达到但不包括结束paren。
如果开始paren不存在,则捕获应该达到但不包括下一个空格。
括号必须匹配,所以我不能像这样让paren可选:/matchable_junk [(]?([^ )]+)[)]?/
,因为这将匹配以下无效字符串:matchable_junk (important ignorable_junk
和matchable_junk important) ignorable_junk
。
我提出了一个正则表达式,它可以通过使用交替(|
)来实现这一点。/matchable_junk ([(]([^)]+)[)]|([^ ]*))/
然而,使用该解决方案,2种不同的模式在不同的捕获组中结束。
我可以想到多个多步骤的解决方案,但有没有一种方法可以用一个正则表达式来实现这一点?
注意:为了解决这个问题,假设捕获字符串永远不会包含)
本身,所以没有转义需要担心(但是如果存在括号,那么捕获字符串 * 可能 * 包含空格)
请只使用正则表达式的Javascript。
1条答案
按热度按时间k4ymrczo1#
不知道它是否适合你在真实的文本中的需要,但对于你提供的示例文本,我认为下面的模式解决了你当前正则表达式的问题: