Объединение регулярных выражений - PullRequest
1 голос
/ 27 июня 2011

Можно ли объединить эти 5 регулярных выражений в одно (или хотя бы некоторые из них)?

/[ ,][ABCabc][:]\d+/g
/[ ,][ABCabc][ ]?[=][ ]?\d+/g
/^[ABCabc][:]\d+/g
/^[ABCabc][ ]?[=][ ]?\d+/g
/[\\][\w][ABCabc][ ]?[=][ ]?\d+/g

Советы, исправления и улучшения также будут хороши.

Ответы [ 4 ]

7 голосов
/ 27 июня 2011

Прежде всего, уменьшите их:

  • /[ ,][a-c]:\d+/gi
  • /[ ,][a-c] ?= ?\d+/gi
  • /^[a-c]:\d+/gi
  • /^[a-c] ?= ?\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

Теперь, объединяя их, вы имеете в виду, что вы тестируете матч против любого, а не против всех, верно?Итак, шаг 2:

  • /[ ,][a-c](:| ?= ?)\d+/gi
  • /^[a-c]:\d+/gi
  • /^[a-c] ?= ?\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

Шаг 3:

  • /[ ,][a-c](:| ?= ?)\d+/gi
  • /^[a-c](:| ?= ?)\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

Шаг 4:

  • /(^| |,)[a-c](:| ?= ?)\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

Шаг 5:

  • /((^| |,)[a-c](:| ?= ?)|\\\w[a-c] ?= ?)\d+/gi

Вуаля.Вы можете использовать снимки для шага 5, но я не буду усложнять ситуацию.

Если вы можете, придерживайтесь результата из шага 4. Шаг 5 делает регулярное выражение длинным и запутанным.

2 голосов
/ 28 июня 2011

Вы можете взглянуть на Regexp::Assemble

0 голосов
/ 27 июня 2011

Если под объединением вы подразумеваете тест на регулярное выражение, чтобы при совпадении любого из шаблонов вы получили совпадение, да:

(?:
    (?:/[ ,][ABCabc][:]\d+)|
    (?:/[ ,][ABCabc][ ]?[=][ ]?\d+)|
    (?:/^[ABCabc][:]\d+)|
    (?:/^[ABCabc][ ]?[=][ ]?\d+)|
    (?:/[\\][\w][ABCabc][ ]?[=][ ]?\d+)
)/g
0 голосов
/ 27 июня 2011

Вы всегда можете объединить регулярные выражения в одно, просто с помощью (regex1) | (regex2) | (regex3) ... (Если это то, что вы подразумеваете под «объединить в одно»)

Вопрос в том, стоит ли вам обязательно? Регулярные выражения, как правило, довольно трудно читать, и все, что вы можете сделать, чтобы их было легче понять и изменить в будущем, следует поощрять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...