0

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

  • tr12345
  • fr12345

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

  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

4

1 回答 1

1

你试图以错误的方式做到这一点。'|' 实际上是 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]的意思是“[t,r] 之一”

于 2017-10-17T13:46:09.953 回答