Мне нужно регулярное выражение для замены нескольких косую черту в URL с одной косой чертой, исключая те, которые следуют за двоеточием
например. http://link.com//whatever///
станет http://link.com/whatever/
Мне нужно регулярное выражение для замены нескольких косую черту в URL с одной косой чертой, исключая те, которые следуют за двоеточием
например. http://link.com//whatever///
станет http://link.com/whatever/
Как вы уже приняли ответ. Чтобы показать еще больше возможностей совпадения и контроля совпадений, это может помочь вам в будущем:
var url = 'http://link.com//whatever///';
var set = url.match(/([^:]\/{2,3})/g); // Match (NOT ":") followed by (2 OR 3 "/")
for (var str in set) {
// Modify the data you have
var replace_with = set[str].substr(0, 1) + '/';
// Replace the match
url = url.replace(set[str], replace_with);
}
console.log(url);
Будет выводиться:
http://link.com/whatever/
Двойной удар не будет иметь значения в вашей ситуации. Если у вас есть эта строка:
var url = 'http://link.com//om/om/om/om/om///';
Ваш массив set
будет содержать несколько m//
. Немного избыточно, поскольку цикл увидит эту переменную несколько раз. Приятно, что String.replace()
ничего не заменяет, если ничего не находит, поэтому никакого вреда не было.
Что бы вы могли сделать, сначала удалите дубликаты из set
, но это почти потребует того же объема ресурсов, что и просто для того, чтобы цикл for-loop прошел через них.
Удачи!
Я думаю, что это должно работать: /[^:](\/+)/
или /[^:](\/\/+)/
, если вы хотите только кратные.
Он не будет соответствовать ведущему //
, но похоже, что вы этого не ищете.
Для замены:
"http://test//a/b//d".replace(/([^:]\/)\/+/g, "$1") // --> http://test/a/b/d
result = subject.replace(/(?<!http:)\/*\//g, "/");
или (для http, https, ftp и ftps)
result = subject.replace(/(?<!(?:ht|f)tps?:)\/*\//g, "/");