\S
соответствует непробельному символу, включая /
, поэтому в первом примере он не будет пересекать первый пробел, но вы получите частичное совпадение, потому что нет конечного якоря $
Один из вариантов - сопоставить не косую черту, используя класс отрицательных символов [^/\s]+
, не соответствующий символу пробела или /
.Затем опционально сопоставьте косую черту и используйте .*
для сопоставления с остальной частью строки.
^https?://[^/\s]+(?:/.*)?$
Regex demo