заменить один символ несколькими символами в разных позициях - PullRequest
0 голосов
/ 24 октября 2018

У меня есть строка в JS, например

var str = "hello @something and @someone ok";

Я хочу заменить символы, начинающиеся с @, что я делаю, сопоставляя шаблон с регулярным выражением, например

str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>')

Предположим, что строка var str = "hello @something";, поэтому замена отлично подходит для этого, поскольку она ищет @ и заменяет его на <a href>, но если строка var str = "hello @something and @someone ok";, то сначала она заменяет @something на правильный href, а затем заменяет@ someone с правильным href, который в конечном итоге меняет href @something на href @someone.Я хочу, чтобы значения обоих значений были разными.

1 Ответ

0 голосов
/ 24 октября 2018

Насколько я понимаю, вы делаете следующее:

Вы храните строку, содержащую несколько @

var str = "hello @something and @someone ok";

и ссылку

var link = "stackoverflow.com";

Тогдавы применяете str.replace к этой строке

str = str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>');

В результате получается

"hello <a href="stackoverflow.com"> @something </a> and <a href="stackoverflow.com"> @someone </a> ok"

Затем вы меняете ссылку

link = "stackoverflow.com/questions/tagged/javascript";

и снова применяете str.replaceваша строка

str = str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>');

Результат

"hello <a href="stackoverflow.com"> <a href="stackoverflow.com/questions/tagged/javascript"> @something </a> </a> and <a href="stackoverflow.com"> <a href="stackoverflow.com/questions/tagged/javascript"> @someone </a> </a> ok"

Это ваша проблема.Чтобы исправить это, вы должны удалить g из вашего регулярного выражения и удалить @ в замене.Тогда каждая строка будет заменена только один раз правильной ссылкой.Также вы должны изменить свое регулярное выражение.Моя рекомендация

var str = "hello @something and @someone ok";
var link = "stackoverflow.com";
str = str.replace(/@(\w+)/, '<a href="'+link+'"> $1 </a>');
link = "stackoverflow.com/questions/tagged/javascript";
str =  str.replace(/@(\w+)/, '<a href="'+link+'"> $1 </a>');
...