要么是正则表达式的一部分,要么匹配两种可能性

时间:2017-10-17 13:29:41

标签: javascript regex regex-alternation

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

  • tr12345
  • fr12345

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

  1. /(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
  2. /(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img
  3. 这很好用,但我认为将两者结合起来会更有效率。我从其他文章中看到,您可以使用替换|来匹配变体。我需要在" tr"之后重复正则表达式。如果我试图匹配两者? 例如,这是可能的吗?

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

    示例input1:

      

    tr12345

    所需的输出1:

      

    12345

    示例input2:

      

    fr123456

    所需的输出2:

      

    123456

    我在这里玩过它: https://regex101.com/r/FUCmv0/2

1 个答案:

答案 0 :(得分:1)

你试图以错误的方式做到这一点。 ' |'实际上是OR,并且具有低优先级,所以你的正则表达式是... tr或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]"

之一