一个正则表达式用于多个字符串

时间:2018-09-27 11:50:47

标签: javascript python regex

我有4种不同的输入类型:

  • COUNT个苹果> = 18个橘子
  • COUNT个苹果> = 18
  • 苹果> = 18个橘子
  • 苹果

我需要将组提取为

{group1} OF {group2} AS {group 3}
 where,
 group1 = 'COUNT'
 group2 = 'apples >= 18'
 group3 = 'apples'    

对于第一个输入,我可以使用以下正则表达式

`/(.*) OF (.*) AS (.*)/g`.

我是否必须对所有这些使用单独的正则表达式,还是由一个正则表达式处理所有这些输入?

1 个答案:

答案 0 :(得分:2)

您可以使用OFAS可选部件,例如:

 /^(?:(.*?) OF )?(.*?)(?:AS (.*))?$/

如您在regex101上所见,我们捕获了三组:OF之前的部分,中间部分和AS之后的部分。

regex101引擎还显示捕获内容:

Match 1
Full match    0-32    `COUNT OF apples >= 18 AS oranges`
Group 1.  n/a `COUNT`
Group 2.  n/a `apples >= 18 `
Group 3.  n/a `oranges`
Match 2
Full match    33-54   `COUNT OF apples >= 18`
Group 1.  n/a `COUNT`
Group 2.  n/a `apples >= 18`
Match 3
Full match    55-78   `apples >= 18 AS oranges`
Group 2.  n/a `apples >= 18 `
Group 3.  n/a `oranges`
Match 4
Full match    79-85   `apples`
Group 2.  n/a `apples`

因此,我们使用(..)?部分将某些元素设为可选,并使用.*?进行非贪婪捕获。

但是请注意,如果表达式包含多个OFAS,则解析器将使用第一个OF作为分隔符,并使用第一个{{1} }作为分隔符。因此,AS将被分隔在COUNT OF apples >= 18 OF lemon < 12 AS bar AS qux中。