Я использую это регулярное выражение для соответствия атрибуту "href" в теге <a>
:
var href_matches = postRep.match(/href="(.*?)"/g);
Регулярное выражение правильно соответствует href, за исключением того, что возвращает целую строку "href= http: example.com".
Как мне получить только значение href (например, example.com)?
Вы можете запустить exec()
в регулярном выражении:
var url_match = /href="(.*?)"/g.exec(postRep);
или удалить глобальный флаг
var url_match = postRep.match(/href="(.*?)"/);
Функция String match() не возвращает возвращенные группы, если установлен глобальный модификатор.
Еще одна идея.
Вы можете попробовать что-то вроде этой функции:
function getHrefs(inputString) {
var out = [];
inputString.replace(/\bhref\b=['"]([^'"]+)['"]/gi, function(result, backreference) {
out.push(backreference);
return '';
});
return out;
}
Улучшенное решение (самое короткое):
function getHrefs(inputString) {
return (inputString.match(/\bhref\b=['"][^'"]+(?=['"])/gi) || []).map(s => s.replace(/^href=["']/,""));
}
Редактировать:
Существует и другой вариант - exec. Но с exec вам понадобится цикл, чтобы получить все совпадения (если вам это нужно).
Вы можете использовать regex lookbehinds, чтобы проверить, существует ли "href=" без фактического включения его в совпадение. Например, пример regex (?<=href=)example\.com
примененный к href=example.com
должен соответствовать только example.com
.
EDIT: этот метод работает только на языках, поддерживающих регулярные выражения. Javascript не поддерживает эту функцию. (спасибо Георгию Наумову за указание на это)