Javascript.RU

replace

Синтаксис

str.replace(regexp, newSubStr|function)

Аргументы

regexp
объект типа RegExp или строка
newSubStr|function
новая подстрока или функция, которая ее возвращает

Описание, примеры

Этот метод не меняет вызывающую строку, а возвращает новую, после замен.

Чтобы произвести глобальный поиск и замену, используйте regexp c флагом "g".

Строка замены

Если вы указываете строку как второй параметр - она может включать в себя следующие специальные сочетания:

$$
Вставляет "$"
$&
Вставляет совпавшую подстроку
$`
Вставляет часть строки, которая предшествует совпавшей подстроке
$'
Вставляет часть строки, которая следует за совпавшей подстрокой
$n или $nn, где n/nn - десятичные цифры
Вставляет n-ю скобку в совпадении, если первый аргумент - объект RegExp

Функция замены

Если вы указываете функцию в качестве второго параметра, то она вызывается при каждом совпадении.

Ваша функция может динамически генерировать строку, которая заменит совпавшую подстроку. В качестве значения для замены используется результат работы функции.

Функция может использовать совпавшие подстроки - она их получает в параметрах вызова. Первый параметр всегда содержит полную совпавшую подстроку.

Если при вызове replace указано регулярное выражение, а не строка, то последующие параметры будут содержать значения скобочных групп.

Наконец, последние два параметра - позиция, на которой произошло совпадения и вызывающая строка.

Следующий пример вернет my XX, zz.

function replacer(str, p1, p2, offset, s) {
  return p1 + ", " + p2;
}

newString = "my XXzz".replace(/(X+)(z+)/, replacer)

Значения параметров при вызове replacer:

str
"XXzz" - совпавшая подстрока
p1
"XX" - первая скобка
p2
"zz" - вторая скобка
offset
3 - позиция в тексте для поиска
s
"my XXzz" - вызывающая строка, т.е строка для поиска

В следующем примере используется строка замены. Глобального поиска при этом не происходит.

Пример: строка замены
str = "тест еще тест"
str.replace("тест","прошел") // = "прошел еще тест"

Для глобального поиска используйте регулярное выражение.

Пример: Глобальная замена строки
str = "тест еще тест"
str.replace(/тест/g,"прошел") // = "прошел еще прошел"
// или так
str.replace(new RegExp("тест",'g'),"прошел")

Следующий пример использует при замене сочетания $1 и $2 для ссылок на результат поиска.

Пример: Замена со ссылками
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1") // "Smith, John"

Автор: ИнфоМастер (не зарегистрирован), дата: 19 декабря, 2009 - 22:54
#permalink

Спасибо! И все же жаль, что нет замены без регулярных выражений...


Автор: Гость (не зарегистрирован), дата: 20 декабря, 2009 - 09:12
#permalink

Как нету? Есть.

'somestring\\w'.replace('\\w', '@') // → somestring@

Автор: miXOnIN (не зарегистрирован), дата: 27 декабря, 2009 - 14:26
#permalink

Спасиб ОГРОМНОЕ!!! Я долго думал,почему replace заменял не все строки,но когда поставил с new RegExp("тест",'g') всё пофурчало!!! СПС!!!


Автор: IrviS (не зарегистрирован), дата: 7 апреля, 2010 - 18:36
#permalink

Опечатка:
...Чтобы произвести глобальныЙ поиск...


Автор: Alinaki (не зарегистрирован), дата: 21 октября, 2011 - 11:11
#permalink

Для глобальной замены лучше подходит str.split(search).join(replace); и работает быстрее, и беспокоиться о спецсимволах почти не надо.


Автор: Гость (не зарегистрирован), дата: 6 ноября, 2011 - 22:06
#permalink

Спасибо! Долго не мог решить вопрос с вырезанием спец символов!!!


Автор: Юрий Анатольевич (не зарегистрирован), дата: 9 января, 2012 - 10:17
#permalink

Метод split вызовет ошибку, если подстрока search не будет найдена в строке str. Т.О. сий подход не универсален. Следует это помнить!
И еще не очень удобно, потому что реальная строка будет заменена, а если это шаблонная строка? Например, {name} ест апельсины?


Автор: Гость (не зарегистрирован), дата: 11 июля, 2023 - 13:56
#permalink

>Метод split вызовет ошибку, если подстрока search не будет найдена в строке str.
Не могу получить такую ошибку. Вы ошиблись?

let str = 'Метод split вызовет ошибку, если подстрока search не будет найдена в строке str.';
let str2 = str.split('z').join('яяя');
console.log(str2);

Автор: ramirez (не зарегистрирован), дата: 18 марта, 2014 - 02:14
#permalink

Спасибо и низкий поклон тебе.


Автор: Гость (не зарегистрирован), дата: 21 февраля, 2016 - 00:20
#permalink

Класс! Вот это то что долго искал! Я зае... с этими регулярками!!!! Спасибо!


Автор: Михайло (не зарегистрирован), дата: 27 ноября, 2011 - 18:12
#permalink

подскажите как можно стереть все \&nbsp\; лучше вообще все спец символы. может есть какой-то аналог addslashes или mysql_real_escape_string


Автор: Мотя (не зарегистрирован), дата: 25 января, 2012 - 11:05
#permalink

А как найти в строке, скажем, 20-й символ (причем без разницы, что за символ там будет стоять) и заменить его например на "А" ?


Автор: компьютерная барахолка (не зарегистрирован), дата: 9 мая, 2012 - 12:33
#permalink

Автору спасибо за статью !!!


Автор: Questioner, дата: 25 мая, 2012 - 21:24
#permalink

Спасибо большое! Но я не понял, как работает str.replace(anything, function);


Автор: brussens, дата: 28 июня, 2012 - 23:03
#permalink

А изза чего может быть проблема при глобальной замене, когда не заменяются символы []


Автор: Гость (не зарегистрирован), дата: 25 октября, 2012 - 17:39
#permalink

Возможно нужно экранировать символы "[" и "]" обратным слэшем.


Автор: Гость (не зарегистрирован), дата: 14 ноября, 2012 - 14:09
#permalink

подскажите как сделать так штоб через replace оствлось только:Сайт для любителей домашних животных и не только. Новости из мира животных

Спосибо заимно


Автор: Гость (не зарегистрирован), дата: 14 ноября, 2012 - 14:14
#permalink

подскажите как сделать так штоб через replace оствлось только:Сайт для любителей домашних животных и не только. Новости из мира животных

meta style="border-color: rgb(0, 0, 255); border-width: 2px; border-style: solid;" name="description" content="Сайт для любителей домашних животных и не только. Новости из мира животных"

Спосибо заимно


Автор: zjiodeu, дата: 24 января, 2013 - 13:49
#permalink

Ребята, подскажите плз как удалить из строки подстроку, которая начинается с символов ">>" и заканчивается "<<"?


Автор: vitalkad (не зарегистрирован), дата: 23 марта, 2013 - 16:59
#permalink

То, что надо! Очень понятно!


Автор: Kvark, дата: 12 апреля, 2013 - 14:17
#permalink

никак не пойму как через репласе заменить два тега одним проходом? в том смысле если встретиться < p > или < /p > заменить на "". Пока делаю тупо так:

strMsg.replace("<p>", '').replace("</p>", '')

--
В пиве сила! В вине мудрость! А в воде... микробы!


Автор: Прохожий (не зарегистрирован), дата: 29 апреля, 2013 - 23:01
#permalink

Спасибо Вам большое,пролили свет в мою темную утомительную ночь


Автор: иван из города (не зарегистрирован), дата: 8 июля, 2013 - 01:39
#permalink

спасибо за объяснение роли флага /../g
и да прибудет с вами

/regexp?/i

!


Автор: DRu999 (не зарегистрирован), дата: 21 июля, 2013 - 09:09
#permalink

Ребят а не подскажите возможно ли:

В базе есть построчный текст. При выводе через replace на конце строки ставится . Возможно как-то ли вместо на конце заключать строку в теги

?


Автор: DRu999 (не зарегистрирован), дата: 21 июля, 2013 - 09:11
#permalink

Блин сорри все теги порезались.

В базе mysql в ячейке есть построчный текст. При выводе через replace на конце строки ставится тег BR. Возможно как-то ли вместо BR на конце заключать каждую строку в тег P


Автор: mobipak (не зарегистрирован), дата: 14 сентября, 2013 - 07:51
#permalink

А можно ли заменить текст на пустой символ? Чтобы ничего не было?


Автор: NikolasSumrak (не зарегистрирован), дата: 25 октября, 2013 - 20:08
#permalink

Забавное поведение функции:

var string = "1";
string.replace("", "sad");
alert(string); // sad1 -

Автор: Гость (не зарегистрирован), дата: 15 января, 2014 - 14:06
#permalink

Привет, спасибо за статью. Есть такая проблема:

'href?lang=en_GB'.replace(/lang=.*&?/, 'lang=en_US&'); // 'href?lang=en_US&' --> ok
'href?lang=en_GB&param=true'.replace(/lang=.*&?/); // 'href?lang=en_US&' --> 'param=true' исчезло --> ?!

Непонятно, почему так работает...


Автор: Sussh (не зарегистрирован), дата: 28 февраля, 2014 - 17:33
#permalink

Надо так писать:

'href?lang=en_GB'.replace(/lang=[^&]*/, 'lang=en_US'); // "href?lang=en_US"
'href?lang=en_GB&param=true'.replace(/lang=[^&]*/, 'lang=en_US'); // "href?lang=en_US&param=true"

Автор: 1 день в js (не зарегистрирован), дата: 6 февраля, 2014 - 09:17
#permalink

я так понял replace работает 1 раз?
т.к. выполняю след.
link = link.replace(/\ /g, '-');
заменяю пробелы на дефис
далее мне нужно заменить в этом же $str все лишние символы слеши скобки и т.д.
ничего не выходит, выручайте!


Автор: sussh (не зарегистрирован), дата: 28 февраля, 2014 - 17:38
#permalink

возможно как-то так:

link = link.replace(/[\ ()\\\/\:]/g, '-');

Автор: sussh (не зарегистрирован), дата: 28 февраля, 2014 - 17:40
#permalink

или если надо убрать все символы не буквы и не цифры и заменить на дефисы, то так:

link = link.replace(/[^\w\d]/g, '-');

Автор: Жанибек (не зарегистрирован), дата: 7 февраля, 2017 - 17:42
#permalink

Спасибо за эту подсказку. Она мне помогла.


Автор: Дмитрий (Radiotehnic) (не зарегистрирован), дата: 31 мая, 2014 - 00:01
#permalink

А может ли эта функция заменять в тексте разные фрагменты на разные выражения, например "Курица" заменить на "яйцо" и параллельно "волк" заменить на "ягнёнок" ?


Автор: 1477 (не зарегистрирован), дата: 4 февраля, 2015 - 17:05
#permalink

ничего не понял, но все равно спс)
автор написал так,что понять может только тот, кто не знал какого-то отдельного момента...
именно поэтому на рынке у нас учебники из США, что авторы просто тупо ленятся объяснить четко и подробно


Автор: Karodar (не зарегистрирован), дата: 11 марта, 2015 - 12:22
#permalink

Вопрос на счёт <<Возращаемого значения>>:


Кто нибудь пояснить может, что эта функция возращает при, так сказать, false. То есть, если искомая строка не найдена: Стандартно: "-1" или булевское значение?


Автор: acso (не зарегистрирован), дата: 27 марта, 2015 - 11:02
#permalink

Добавлю и я свой "костыль" по глобальной замене строк. Моя функция производит глобальную замену, в качестве параметров поиска и замены передаются как строки, так и массивы: srch[0] -> repl[0], srch[1] -> repl[1], ... или srch[0] -> rep, srch[1] -> rep, ... В последних двух параметрах можно указать, что вставить перед и после заменяемого фрагмента.

function strr(txt, search, replace, insbefore, insafter) {
  if (!(search && replace)) return txt;
  var i, txt1, sitem, ritem;
  if (!insbefore) insbefore = '';
  if (!insafter) insafter = '';
  // приводим параметры поиска и замены к массивам
  if ((typeof search) != 'object') search = [search];
  if ((typeof replace) != 'object') replace = [replace];
  // длина массива замены должна быть не меньше длины массива поиска
  if (replace.length < search.length) {
    ritem = replace[replace.length - 1];
    for (i = replace.length; i < search.length; i++) {
      replace.push(ritem);
    }
  }
  // ищем и заменяем
  for (i = 0; i < search.length; i++) {
    sitem = search[i];
    ritem = insbefore + replace[i] + insafter;
    txt1 = '';
    while (txt1 != txt) {
      txt1 = txt;
      txt = txt1.replace(sitem, ritem);
    }
  }
  return txt;
}

Использование:

msg = strr(msg, '\n', '<br>');
  msg = strr(msg, '[hr]', '<hr>');
  msg = strr(msg, ['[b]', '[i]', '[u]', '[s]'], ['<b>', '<i>', '<u>', '<s>']);
  msg = strr(msg, ['[/b]', '[/i]', '[/u]', '[/s]'], ['</b>', '</i>', '</u>', '</s>']);
  msg = strr(msg, ['[left]', '[center]', '[right]'], ['left', 'center', 'right'], '<div style="text-align:', '">');
  msg = strr(msg, ['[/left]', '[/center]', '[/right]'], '</div>');
  msg = strr(msg, ['<br><div>', '</div><br>'], ['<div>', '</div>']);
  msg = strr(msg, ['<br><hr>', '<hr><br>'], '<hr>');

Автор: acso (не зарегистрирован), дата: 27 марта, 2015 - 11:22
#permalink

Кстати, в примере использования строки 3-4 можно записать еще так:

msg = strr(msg, ['[b]', '[i]', '[u]', '[s]'], ['b', 'i', 'u', 's'], '<', '>');
msg = strr(msg, ['[/b]', '[/i]', '[/u]', '[/s]'], ['b', 'i', 'u', 's'], '</', '>');

Автор: Мотя (не зарегистрирован), дата: 8 апреля, 2015 - 09:13
#permalink

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


Автор: Гость (не зарегистрирован), дата: 8 января, 2016 - 01:11
#permalink

Здравствуйте! Помогите пожалуйста со скриптом. Есть сайт с музыкой, все названия песен в одну строку. При переносе через код удаляются начальные ковычки и скобки. Ничего придумать больше т.к. не знаю js. Для наглядного примера ссылочка

https://jsfiddle.net/vyr7aq1f/1/

Спасибо.


Автор: RaYetS (не зарегистрирован), дата: 23 января, 2017 - 13:48
#permalink

//может вот так
for (var i = 0; i < 20; i++) {
var textid = $(".titlid").eq(i).html();
var textid2 = textid.split('-');
// var textid2 = textid.replace (/\- |\(|\"/ , '

');
$(".titlid").eq(i).html(textid2[0] + '
- ' + textid2[1]);
}

Автор: Гость (не зарегистрирован), дата: 5 февраля, 2017 - 22:33
#permalink

возможно из одной строки убирать части которые переданы в другую переменную

var namb=3456284563991
var cl=345
var li2=3991

alert(namb);

var cena2pl=namb.replace(/\cl/g, "");
alert(cena2pl);

var namb2=cena2pl.replace(/\li2/g, "");
alert(namb2); \\\нужен результат 628456


Автор: Гость (не зарегистрирован), дата: 12 августа, 2017 - 12:39
#permalink

теперь я не умру с голоду


Автор: Гость (не зарегистрирован), дата: 4 января, 2018 - 14:42
#permalink

Здравствуйте.
Подскажите, как при помощи replace (или др) в строке "asdfg 123 mn=bv 587" удалить строку "mn=" и еще 2 символа после нее, т.е. как удалить "mn=bv", но "bv" - неизвестна?


Автор: Гость (не зарегистрирован), дата: 7 ноября, 2018 - 15:51
#permalink

var str = "asdfg 123 mn=bv 587"
alert(str.replace(/mn=.{2}/, '')) // если известно, что ровно 2 ЛЮБЫХ символа (буквы, цифры и т.д)
alert(str.replace(/mn=.+\s/, ' ')) // аналогично, но предполагая, что bv произвольной длины, не содержит пробела и следом есть пробел


Автор: Гость (не зарегистрирован), дата: 8 марта, 2019 - 07:19
#permalink

Всем привет!
Такой вопрос.

Есть допустим текст: "г. Москва, ул. Ленина 5"

Как в этом тексте сделать замену на: "г.

<b>

Москва

</b>

, ул. Ленина 5"

Но! С одним условием - поиск по тексту, мы производим словом "москва", т.е. москва - с маленькой буквой, а на выходе текст должен остаться оригинальным, но со вставкой тегов

<b></b>

Автор: Alexey Lisovy (не зарегистрирован), дата: 27 июня, 2019 - 16:26
#permalink

Извините, но написано так, что нуля понять, что она вообще делает и каким образом, мягко говоря, затруднительно.


Автор: Bryliano (не зарегистрирован), дата: 29 июня, 2019 - 18:04
#permalink

Ребят, а как тут поступить?
Вот эту строку: 88002004860
нужно привести к такому виду: 8 800 200 48 60


Автор: БезИмени (не зарегистрирован), дата: 24 января, 2020 - 23:43
#permalink

s = s[0]+' '+s[1]+s[2]+s[3]+' '+s[4]+s[5]+s[6]+' '+s[7]+s[8]+' '+s[9]+s[10];
или
s = s[0]+' '+s.substr(1,3)+' '+s.substr(4,3)+' '+s.substr(7,2)+' '+s.substr(9,2);


Автор: Ромео (не зарегистрирован), дата: 15 августа, 2020 - 20:25
#permalink

Почему
str.replace("/\"/g","") не работает?
Хочу удалить все двойные кавычки в строке.


Автор: Гость (не зарегистрирован), дата: 13 января, 2021 - 18:51
#permalink

Большое спасибо за статью!!!♥


Автор: Гость (не зарегистрирован), дата: 5 июня, 2021 - 13:41
#permalink

Подскажите как удалить весь закоментированный текст через JS
В php такой "html.replace(//g, '');" метод работает, а в JS нифига не удаляет!?


Автор: StasV (не зарегистрирован), дата: 8 июня, 2021 - 14:36
#permalink

А где можно почитать подробнее о синтаксисе всех этих слешей, вопросов и тд? Как я понимаю, он используется не только в replace


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum