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} ест апельсины?


Автор: 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-й символ (причем без разницы, что за символ там будет стоять) и заменить его например на "А" ?


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

s[19] = 'A';


Автор: Гость (не зарегистрирован), дата: 24 апреля, 2012 - 23:18
#permalink

str = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'.split("");
str[19] = 'A';
str = str.join("");
alert(str);


Автор: компьютерная барахолка (не зарегистрирован), дата: 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

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


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

function toAbsURL(s) {
var l = location, h, p, f, i;
if (/^\w+:/.test(s)) {
return s;
}
h = l.protocol + '//' + l.host + (l.port!=''?(':' + l.port):'');
if (s.indexOf('/') == 0) {
return h + s;
}
p = l.pathname.replace(/\/[^\/]*$/, '');
f = s.match(/\.\.\//g);
if (f) {
s = s.substring(f.length * 3);
for (i = f.length; i--;) {
p = p.substring(0, p.lastIndexOf('/'));
}
}
return h + p + '/' + s;
}
var base = document.getElementsByTagName('base')[0];
base.href = toAbsURL(base.href);


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

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


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

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

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

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


Автор: Гость (не зарегистрирован), дата: 12 апреля, 2013 - 15:03
#permalink

strMsg.replace(/<\/?p>/g, '')


Автор: Прохожий (не зарегистрирован), дата: 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


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
10 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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