Either|Or 正则表达式的一部分,用于匹配两种可能性

Either|Or part of regex for matching two possibilities

我们有两种方式引用同一个系统:

现在我每个变体都有一个正则表达式,例如

  1. /(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
  2. /(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img

这很好用,但我认为将两者结合起来会更有效率。我从其他文章中看到,您可以使用交替 | 来匹配变体。如果我试图匹配两者,是否需要在 "tr" 之后重复正则表达式? 例如,这样的事情可能吗?

/(?:^|^\s|[^\/a-zA-Z0-9])tr|fr([0-9]+).*$/img

示例输入 1:

tr12345

期望的输出1:

12345

示例输入 2:

fr123456

期望的输出2:

123456

我一直在这里玩: https://regex101.com/r/FUCmv0/2

您尝试以错误的方式进行操作。 '|'实际上是 OR,并且优先级较低,所以你的正则表达式是 ...tr OR fr...,但你需要 ...(tr|fr)...

所以你应该使用 ()(就像在数学表达式中一样)。正则表达式将是

/(?:^|^\s|[^\/a-zA-Z0-9])(tr|fr)([0-9]+).*$/img

请注意 () 也会生成匹配组。

但在你的情况下,下一个表达式会更好:

/(?:^|^\s|[^\/a-zA-Z0-9])[tf]r([0-9]+).*$/img

这里[tf]表示"one of [t,r]"