Terser RegExp 用于捕获分组单词的替代集合

我想抓住单词 ferrariferry, 和ferret

正则表达式很容易是:

/ferr(ari|y|et)/

但是,我注意到一个模式:当您想捕获单个单词的多个替代词时,可以使用方括号[wordsToCapture]。例如,我想抓住单词:vowel avowel evowel uvowel ovowel i

正则表达式可以是:vowel [aeiou]其具有比噪声少vowel (a|e|i|o|u)

所以我尝试使用方括号来捕捉分组词的多个替代方案。但是,[...](方括号)使我的捕获组((...)圆括号)无用,这意味着如果我使用此正则表达式ferr[(ari)(y)(et)],它将改为匹配:ferr(ferraferrrferri,并且该列表针对方括号中显示的每个字符进行.

有没有办法让我方括号内的捕获组括号保留其特殊含义,从而使我的 RegExp 更简洁?或者有没有其他方法可以让它更简洁?


米脂
浏览 124回答 3
3回答

忽然笑

正如 Jack 所提到的,方括号不能以这种方式使用,但是如果您遇到括号问题,出于某种原因,您仍然有一些选择。如果您需要,可以帮助了解的一种是非捕获性的,如下所示:/ferr(?:ari|y|et)/有它的一个很好的解释在这里。

繁星点点滴滴

从技术上讲,有一些方法可以做到这一点,但可能不是必需的,这取决于我们希望实现的目标:ferr[a]?[r]?[i]?[y]?[e]?[t]?演示 1其他例子是:ferr[ar]?[i]?[y]?[e]?[t]?ferr[ar]?[iy]?[e]?[t]?ferr[ar]?[iy]?[et]?对于ferrari,ferret和ferry,使用char class,这是可能的,但过多:ferr([a][r][i]|[e][t]|[y])ferr(ari|et|y)演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript