Почему этот https? и (| en) регулярное выражение не работает? - PullRequest
0 голосов
/ 15 января 2020

Я хочу запустить этот код как по http, так и по https. А также с и без части en. Где я go не так?

RegExp(/https?:\/\/(myzcloud.me|myzcloud.pro)\/(|en)\/album\/[0-9]+\/[\-_a-zA-Z0-9]+/);

Это должно работать на всех из них:

https://myzcloud.me/en/album/551610/mya
http://myzcloud.me/en/album/551610/mya
https://myzcloud.me/album/551610/mya
http://myzcloud.me/album/551610/mya

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Вы можете использовать это, и вы получите свои 4 URL:

/https?:\/\/myzcloud\.(me|pro)\/(en\/)?album\/\d+\/[a-zA-Z\d_-]+/g

Вы можете видеть, как ваш код работает в Здесь .

0 голосов
/ 16 января 2020

Вы можете использовать

/https?:\/\/(myzcloud\.(?:me|pro))\/(en\/)?album\/\d+\/[-\w]+/

Если вам нужно сопоставить всю строку, добавьте ^ в начале и $ в конце:

/^https?:\/\/(myzcloud\.(?:me|pro))\/(en\/)?album\/\d+\/[-\w]+$/

См. regex demo

ПРИМЕЧАНИЯ

  • Все литеральные точки в шаблоне, которые находятся вне классов символов, должны быть экранированы
  • (myzcloud.me|myzcloud.pro) = (myzcloud\.(?:me|pro)), нет необходимости повторять идентичные части шаблона
  • Преступник! Ваш \/(|en)\/ опционально соответствует en, но если он отсутствует, шаблон ожидает, что // появится в строке. Один / должен быть перемещен в группу, но в JS имеет смысл просто использовать необязательную группу (en\/)?.
0 голосов
/ 15 января 2020

Предполагая, что вы хотите соответствовать следующим форматам:

http://myzcloud.me/album/123/a
https://myzcloud.pro/en/album/123/a

Тогда часть (|en)\/ вашего регулярного выражения не будет соответствовать ни одному из результатов. Вместо этого вы, вероятно, ищете (en\/)*:

As:

/https?:\/\/(myzcloud.me|myzcloud.pro)\/(en\/)*album\/[0-9]+\/[\-_a-zA-Z0-9]+/

Это можно увидеть работающим здесь .

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