JavaScript заменяет текст результатом функции для каждого совпадения в тексте - PullRequest
1 голос
/ 19 апреля 2011

Я пытаюсь заменить все ссылки в элементе textarea на результат функции для этого фрагмента текста.

Пример:


url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
Text = "Text with link inside www.stackoverflow.com";
text.replace(url, convert(RESULT));
document.write(text);

function convert(link){
  return " XX " + link + "XX";
}

Что мне нужно, так этокаждая ссылка, найденная в этой строке, конвертируется в XX или любую другую строку.Дело в том, что мне нужна КАЖДАЯ ссылка в тексте для отправки этой функции, чтобы я мог заменить каждую из них.

Я искал в Интернете пару часов.Перепробовал много вещей.Ничего не работает.

Есть идеи, как это сделать?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Есть несколько проблем.

  1. Функция replace допускает ссылку на функцию в качестве второго аргумента. Вы вызываете функцию convert, а не передаете ссылку.
  2. Функция replace не изменяет исходную строку. Вам нужно сохранить его результат.
  3. Вы пытаетесь использовать convert до того, как оно будет определено.

Собираем все вместе:

function convert(link) {
    return " XX " + link + "XX";
}
var url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
var text = "Text with link inside www.stackoverflow.com";
text = text.replace(url, convert);

Выход:

"Text with link inside XX www.stackoverflow.comXX"
1 голос
/ 19 апреля 2011

String#replace не изменяет получателя, поскольку строки в JavaScript являются неизменяемыми.Вы хотите вместо этого:

url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
text = "Text with link inside www.stackoverflow.com";
text = text.replace(url, convert(RESULT));
document.write(text);

function convert(link){
  return " XX " + link + "XX";
}

Кроме того, у вас была ссылка на Text вместо text, которую я исправил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...