Я пытался найти решение для замены всех ссылок, у которых нет http:// или https:// перед ссылкой с добавленной версией ссылки на http: //в теме.
В настоящее время у меня есть что-то вроде этого:
static correctUrls(input: string): string {
// get all hrefs from the input
let urls = input.match('<a[^>]* href="([^"]*)"/g');
// if no urls return original input
if (!urls) {
return input;
}
// remove duplicate urls
urls = urls.filter((item, pos) => {
return urls.indexOf(item) === pos;
});
// if no urls in input
if (!urls) {
return input;
}
for (const url of urls) {
// if url does not have https
// tslint:disable-next-line: max-line-length
if (!url.match('^ (http: \/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$')) {
input = input.replace(url, 'https://' + url);
}
}
return input;
}
Любая помощь будет принята с благодарностью. Пожалуйста, включите объяснение того, как работает регулярное выражение вашего ответа. Я нашел много похожих вопросов к этому, но со всеми решениями, которые я нашел, когда я пытаюсь сделать input.match
, он возвращает совпадающее href
дважды (если есть один), но если есть два href
s, тогда он возвращает мусор.
Вот входные данные:
<p> We love
<a href="https://google.com"
rel="noopener noreferrer"
target="_blank">Google</a>
and
<a href="Facebook.com"
rel="noopener noreferrer"
target="_blank">Facebook</a>.
</p>
И ожидаемый результат:
<p> We love
<a href="https://google.com"
rel="noopener noreferrer"
target="_blank">Google</a>
and
<a href="https://Facebook.com"
rel="noopener noreferrer"
target="_blank">Facebook</a>.
</p>