Либо | Или часть регулярного выражения для сопоставления двух возможностей

У нас есть два способа обращения к одной и той же системе:

  • 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

Пример input2:

fr123456

Желаемый выход2:

123456

Я играл с этим здесь: https://regex101.com/r/FUCmv0/2

1 ответ

Решение

Вы пытаетесь сделать это неправильно. '|' на самом деле ИЛИ и имеет низкий приоритет, так что ваше регулярное выражение... 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]"

Другие вопросы по тегам