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"