@lexinti

Regexp с условиями?

Добрый день всем. Мне нужно с помощью регулярного выражения найти ссылки без доменов в html и заменить их на ссылки с доменом

К примеру есть в html ссылка на стили
<link href="/css/main.css?v=1.4" rel="stylesheet" type="text/css">

или
<link href="css/main.css?v=1.4" rel="stylesheet" type="text/css">


Мне нужно определить что "href=" начинается не с "href="http(s|)://" , что бы можно было привести ссылки к виду
<link href="https://site1.ru/css/main.css?v=1.4" rel="stylesheet" type="text/css">
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@Bright144
Вот паттерн который тебе нужен: "(?<=href=\")(?!http(s|):\/\/)\/*"
А тут можешь поиграться https://regex101.com/r/cqhv22/1
В регулярках Negative Lookahead используется как not. (?!"условие")
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
(?<=link\shref=['"])(?!http(s)?:\/\/)(.+?)(?=['"])
Оберните эту регулярку в "просмотр вперед".
В одном случае курсор установится в позицию между кавычкой и началом ссылки без слеша:
(?=(?<=link\shref=['"])(?!http(s)?:\/\/)[^\/](.+?)(?=['"]))

Нужно дополнить домен со слешем.
https://site1.ru/
Во втором случае регулярка ищет ссылку со слешем:
(?=(?<=link\shref=['"])(?!http(s)?:\/\/)\/(.+?)(?=['"]))

Дополняем без слеша.
https://site1.ru
ЗЫ: Скорее всего вы некорректно допишите относительные ссылки. К ним еще нужно знать base url. Это регуляркой не решить. Или вы должны знать адрес обрабатываемой страницы без запросной части (path), чтобы им дополнить первый случай.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы