Как на JavaScript и replace заменить все вхождения, а не только первое?

Вопрос

Я использую функцию ниже, чтобы найти URL-адреса внутри заданного текста и заменяю их HTML-ссылками. Но это регулярное выражение работает только для первого совпадения.

function replaceURLWithHTMLLinks(text) {
var exp = /((https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/i;
return text.replace(exp,"<a href=''$1''>$1</a>");
}

Как я могу заменить все URL? Я предполагаю, что для этого мне следует использовать метод exec, но пока что не очень представляю, как именно это делать.

Ответ №1

Добавь ‘g’ в конец регулярного выражения, чтобы задать поиск по всему тексту:

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

Однако, отмечу, что Ваша функция несовершенна и будет пропускать URL, записанные в некоторых форматах, например, если после адреса будет идти запятая (http://www.example.com,) и т.д. О поддержке кириллических адресов вообще речи не идёт. Но это уже другой вопрос.

No responses yet

Добавить комментарий