Либо | Или часть регулярного выражения для сопоставления двух возможностей
У нас есть два способа обращения к одной и той же системе:
- tr12345
- fr12345
Прямо сейчас у меня есть одно регулярное выражение на вариацию, например
/(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
/(?:^|^\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]"