如何匹配,但不捕获,正则表达式的一部分?

前端之家收集整理的这篇文章主要介绍了如何匹配,但不捕获,正则表达式的一部分?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个字符串列表。其中一些是123 -… 456的形式。可变部分“…”可以是:

>字符串“apple”后跟一个连字符,例如。 123-apple-456
>字符串“banana”,后跟连字符,例如。 123-banana-456
>空白字符串,例如123-456(注意只有一个连字符)

除“apple”或“banana”之外的任何字词都无效。

对于这三种情况,我想分别匹配“苹果”,“香蕉”和“”。注意,我不想捕获连字符,但我总是想匹配它。如果字符串不是如上所述的形式123 -… 456,则根本没有匹配。

我如何写一个正则表达式来做到这一点?假设我有一种风味,允许lookahead,lookbehind,lookaround和非捕获组。

这里的关键观察是,当你有“苹果”或“香蕉”,你也必须有结尾连字符,但你不想匹配它。当您匹配空白字符串时,您不能使用尾随连字符。封装这个断言的正则表达式将是正确的,我想。

唯一不捕获东西的方法是使用 look-around assertions
(?<=123-)((apple|banana)(?=-456)|(?=456))

因为即使使用non-capturing groups (?:…),整​​个正则表达式捕获它们匹配的内容。但是这个正则表达式只匹配苹果或香蕉,如果它前面有123-和后面的-456,或者它匹配空字符串,如果前面有123-和后面的456。

猜你在找的正则表达式相关文章