Regex для соответствия ISO языков ISO - PullRequest
2 голосов
/ 11 октября 2019

У меня есть следующие языки или языковые коды локали в URL, и я пытаюсь идентифицировать их через REGEX. Я был частично успешен в их идентификации, но это не помогло в некоторых сценариях

Языки, которые я тестирую с

  • en-us - Проходит
  • us -Fails

Вот такой REGEX у меня есть

([a-zA-Z]{2}|[a-zA-Z]{2}-[a-zA-Z]{2}\/)c\/(deals-and-tips\/)?

Например:

Чего мне не хватает в приведенном выше REGEX?

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Последнее / не соответствует в любом случае, так как ваши URL не имеют его, в любом случае я бы переписал ваше регулярное выражение следующим образом: ([a-zA-Z]{2})(-[a-zA-Z]{2})?\/c\/(deals-and-tips)?. Таким образом, он всегда ищет первую часть (en) и считает вторую (-us) необязательной.

В качестве альтернативы используйте (\w{2})(-\w{2})?\/c\/(deals-and-tips)?, если вы не против того, чтобы рисковать, чтобы сопоставить подчеркивания и тому подобное. simbols

1 голос
/ 11 октября 2019

Требуемое регулярное выражение:

([a-zA-Z]{2}|[a-zA-Z]{2}-[a-zA-Z]{2})\/c\/(deals-and-tips\/)?

Отличие от вашего регулярного выражения состоит в том, что я переместил первый \/ изнутри скобки наружу (чтобы сидеть с c\/).

Тест здесь .

0 голосов
/ 11 октября 2019

Причина, по которой ваш шаблон не соответствует us, заключается в том, что чередование ([a-zA-Z]{2}|[a-zA-Z]{2}-[a-zA-Z]{2}\/) соответствует только \/ во второй части чередования.

Также оно не соответствует последней группе со сделкамии подсказки, потому что в данных примера нет завершающего \/.

Ваш обновленный паттерн может выглядеть как

([a-zA-Z]{2}|[a-zA-Z]{2}-[a-zA-Z]{2})\/c\/(deals-and-tips)?

Regex demo

Вы можете немного сократить шаблон, используя необязательную группу без захвата (?:-[a-zA-Z]{2})? внутри первой группы захвата, чтобы при желании сопоставить деталь, начинающуюся с дефиса.

Как и в примере данных, вы можете сопоставить ведущую\/ перед группой захвата, чтобы получить более эффективное совпадение.

\/([a-zA-Z]{2}(?:-[a-zA-Z]{2})?)\/c\/(deals-and-tips)?

По частям

  • \/ Чтобы быть более точным, сопоставьте ведущую /
  • ( Захват группа 1
    • [a-zA-Z]{2} Совпадение 2 символа az
    • (?:-[a-zA-Z]{2})? По выбору совпадение - и 2 знакаaz
  • ) Закрыть группу
  • \/c\/ Матч /c/ предложения и советы`
  • (deals-and-tips)? Опциональный захват группа 2 совпадение deals-and-tips

Regex demo

Обратите внимание, что если вы используете другой разделитель, чем /, вам не нужно избегать косой черты.

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