为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2021-06-29 10:18:07
我想抓住单词 ferrari, ferry, 和ferret。正则表达式很容易是:/ferr(ari|y|et)/但是,我注意到一个模式:当您想捕获单个单词的多个替代词时,可以使用方括号[wordsToCapture]。例如,我想抓住单词:vowel a, vowel e, vowel u, vowel o, vowel i。正则表达式可以是:vowel [aeiou]其具有比噪声少vowel (a|e|i|o|u)所以我尝试使用方括号来捕捉分组词的多个替代方案。但是,[...](方括号)使我的捕获组((...)圆括号)无用,这意味着如果我使用此正则表达式ferr[(ari)(y)(et)],它将改为匹配:ferr(, ferra, ferrr, ferri,并且该列表针对方括号中显示的每个字符进行.有没有办法让我方括号内的捕获组括号保留其特殊含义,从而使我的 RegExp 更简洁?或者有没有其他方法可以让它更简洁?
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

正如 Jack 所提到的,方括号不能以这种方式使用,但是如果您遇到括号问题,出于某种原因,您仍然有一些选择。

如果您需要,可以帮助了解的一种是非捕获性的,如下所示:

/ferr(?:ari|y|et)/

有它的一个很好的解释在这里


查看完整回答
反对 回复 2021-07-01
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

从技术上讲,有一些方法可以做到这一点,但可能不是必需的,这取决于我们希望实现的目标:


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)

演示


查看完整回答
反对 回复 2021-07-01
  • 3 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信