Регулярные выражения не соответствуют содержимому, но вся искомая строка

0

Я использую это регулярное выражение для соответствия атрибуту "href" в теге <a>:

var href_matches = postRep.match(/href="(.*?)"/g);

Регулярное выражение правильно соответствует href, за исключением того, что возвращает целую строку "href= http: example.com".
Как мне получить только значение href (например, example.com)?

Теги:
cordova

3 ответа

1
Лучший ответ

Вы можете запустить exec() в регулярном выражении:

var url_match = /href="(.*?)"/g.exec(postRep);

или удалить глобальный флаг

var url_match = postRep.match(/href="(.*?)"/);

Функция String match() не возвращает возвращенные группы, если установлен глобальный модификатор.

  • 0
    Я пошел с "exec" решением выше и зациклил каждый результат. Большое спасибо за это, Флинт! Это сработало
1

Еще одна идея.

Вы можете попробовать что-то вроде этой функции:

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 вам понадобится цикл, чтобы получить все совпадения (если вам это нужно).

  • 0
    Спасибо за это! Но я думаю, что решение "exec" является более простым для моих нужд
0

Вы можете использовать regex lookbehinds, чтобы проверить, существует ли "href=" без фактического включения его в совпадение. Например, пример regex (?<=href=)example\.com примененный к href=example.com должен соответствовать только example.com.

EDIT: этот метод работает только на языках, поддерживающих регулярные выражения. Javascript не поддерживает эту функцию. (спасибо Георгию Наумову за указание на это)

  • 1
    Движок регулярных выражений JavaScript не поддерживает просмотр назад.
  • 0
    Может быть, можно было бы просто использовать javascript, чтобы обрезать "href =" после того, как он совпадет?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню