Как бы я проверил, есть ли в ссылке «/-s»?

#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:

Попробуй

 ^(https?://)?((www|m).)?soundcloud.com(/[a-zA-Z0-9_-] ) /s-[^ "] b
 

ДЕМОНСТРАЦИЯ

Комментарии:

1. Идеально! Это регулярное выражение также выполняет то, что я просил, но я собираюсь сохранить ответ @Alizera в качестве принятого ответа только потому, что они объяснили, какие изменения они внесли в мое исходное регулярное выражение и что эти изменения означают/делают. Это выглядит как более компактное регулярное выражение, но я слишком неопытен, чтобы найти существенные различия между этим регулярным выражением и тем, которое содержится в принятом ответе. Если я что-то упускаю и кто-то считает, что это должен быть приемлемый ответ, пожалуйста, ответьте на это сообщение