URL автозапуска JavaScript, но избегают рекурсии

Я пытаюсь создать функцию автосвязи в javascript, которая автоматически превращает URL-адреса в ссылки, когда пользователь вводит (ContentEditable div).

Я использую это регулярное выражение:

var text = 'Some text containing URLs';
var exp = /(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
var newtext = text.replace(exp,"<a href='$1'>$1</a>");

Приведенный выше код работает нормально, но поскольку код вызывается каждый раз, когда пользователь вводит текст, происходит рекурсия:

<a href='<a href='<a href=' etc.

Как я могу избежать этого, пока сценарий обновляет текст по мере ввода пользователем текста?

Поэтому вопрос (спасибо @putvande): как проверить, не содержит ли URL-адрес:

<a href='... 

(Я не очень разбираюсь в регулярных выражениях)

1 ответ

Вы можете сопоставить только те шаблоны URL, которые не имеют префикса > или ', Хотя это может быть не на 100% надежно, но должно быть достаточно для начала.

function urlify(text) {
    var exp = /^\>(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>");
}

При вызове это:

urlify('Some text http://example.com containing URLs');

возвращается "Some text <a href='http://example.com'>http://example.com</a> containing URLs"

urlify("Some text <a href='http://example.com'>http://example.com</a> containing URLs");

возвращается "Some text <a href='http://example.com'>http://example.com</a> containing URLs"

Другие вопросы по тегам