#javascript #regex
Вопрос:
Я использую следующее регулярное выражение: ^(https?://)?(www.)?(m.)?soundcloud.com/[^ "] /[^ "] /(s-)[^ "] g
чтобы проверить, является ли ссылка soundcloud общедоступной или частной, однако она не работает, так как я читал регулярные выражения в течение последних 2 часов и до сих пор не понял, тестируются как частные, так и общедоступные ссылки true
частная ссылка: https://soundcloud.com/user/album
— НЕ ДОЛЖНА СОВПАДАТЬ
С частной ссылкой: https://soundcloud.com/user/album/IX8PBwQLvX8
— НЕ ДОЛЖНА СОВПАДАТЬ
С общедоступной ссылкой: https://soundcloud.com/user/album/s-IX8PBwQLvX8
— ДОЛЖНА СОВПАДАТЬ
Уникальный идентификатор-это s-
после последнего /
, поэтому я хочу, чтобы он проверял истинность ТОЛЬКО в том случае, если есть s-
после последнего /
Мои доводы в пользу этого регулярного выражения, пожалуйста, исправьте меня там, где это необходимо.
^(https?://)?(www.)?(m.)?
: Проверьте , начинается ли строка с https://
ИЛИ www.
ИЛИ m.
soundcloud.com
: Проверьте, является ли домен soundcloud.com
, да
/[^ "]
: Проверяет наличие следующего /
с любым количеством символов после него, которое не space/u200b
является или "
. Я использую это дважды из-за маршрутов /пользователь и /альбом
/(s-)
: Найдите группу s-
после последней /
Ответ №1:
Для проверки того, что если после последней обратной косой черты стоит «s», вы можете добавить это (?=.*/s-)
перед вашим шаблоном, чтобы он стал:
(?=.*/s-)^(https?://)?(www.)?(m.)?soundcloud.com/[^ "] /[^ "] /(s-)[^ "]
Кроме того, вы должны бежать на точку после www и как действует ссылки не может содержать пробел можно спокойно удалить пробел в этой части вашего рисунка [^ "]
, и, как вы повторите эту часть в два раза вы можете снять вторую часть и выложить его в группе и использовать {2}, который проверяет этот узор повторить два раза:
(?=.*/s-)^(https?://)?(www.)?(m.)?soundcloud.com/([^"] /){2}(s-)[^"]
Смотрите Демонстрацию регулярных выражений
Комментарии:
1. Теперь это быстрый ответ, это делает именно то, что я хочу! Спасибо @Alireza
Ответ №2:
Комментарии:
1. Идеально! Это регулярное выражение также выполняет то, что я просил, но я собираюсь сохранить ответ @Alizera в качестве принятого ответа только потому, что они объяснили, какие изменения они внесли в мое исходное регулярное выражение и что эти изменения означают/делают. Это выглядит как более компактное регулярное выражение, но я слишком неопытен, чтобы найти существенные различия между этим регулярным выражением и тем, которое содержится в принятом ответе. Если я что-то упускаю и кто-то считает, что это должен быть приемлемый ответ, пожалуйста, ответьте на это сообщение