Этот метод не меняет вызывающую строку, а возвращает новую, после замен.
Чтобы произвести глобальный поиск и замену, используйте 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"
Спасибо! И все же жаль, что нет замены без регулярных выражений...
Как нету? Есть.
Спасиб ОГРОМНОЕ!!! Я долго думал,почему replace заменял не все строки,но когда поставил с new RegExp("тест",'g') всё пофурчало!!! СПС!!!
Опечатка:
...Чтобы произвести глобальныЙ поиск...
Для глобальной замены лучше подходит str.split(search).join(replace); и работает быстрее, и беспокоиться о спецсимволах почти не надо.
Спасибо! Долго не мог решить вопрос с вырезанием спец символов!!!
Метод split вызовет ошибку, если подстрока search не будет найдена в строке str. Т.О. сий подход не универсален. Следует это помнить!
И еще не очень удобно, потому что реальная строка будет заменена, а если это шаблонная строка? Например, {name} ест апельсины?
>Метод split вызовет ошибку, если подстрока search не будет найдена в строке str.
Не могу получить такую ошибку. Вы ошиблись?
Спасибо и низкий поклон тебе.
Класс! Вот это то что долго искал! Я зае... с этими регулярками!!!! Спасибо!
подскажите как можно стереть все \ \; лучше вообще все спец символы. может есть какой-то аналог addslashes или mysql_real_escape_string
А как найти в строке, скажем, 20-й символ (причем без разницы, что за символ там будет стоять) и заменить его например на "А" ?
s[19] = 'A';
str = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'.split("");
str[19] = 'A';
str = str.join("");
alert(str);
Автору спасибо за статью !!!
Спасибо большое! Но я не понял, как работает str.replace(anything, function);
А изза чего может быть проблема при глобальной замене, когда не заменяются символы []
Возможно нужно экранировать символы "[" и "]" обратным слэшем.
подскажите как сделать так штоб через replace оствлось только:Сайт для любителей домашних животных и не только. Новости из мира животных
Спосибо заимно
подскажите как сделать так штоб через replace оствлось только:Сайт для любителей домашних животных и не только. Новости из мира животных
meta style="border-color: rgb(0, 0, 255); border-width: 2px; border-style: solid;" name="description" content="Сайт для любителей домашних животных и не только. Новости из мира животных"
Спосибо заимно
Ребята, подскажите плз как удалить из строки подстроку, которая начинается с символов ">>" и заканчивается "<<"?
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);
То, что надо! Очень понятно!
никак не пойму как через репласе заменить два тега одним проходом? в том смысле если встретиться < p > или < /p > заменить на "". Пока делаю тупо так:
--
В пиве сила! В вине мудрость! А в воде... микробы!
strMsg.replace(/<\/?p>/g, '')
Спасибо Вам большое,пролили свет в мою темную утомительную ночь
спасибо за объяснение роли флага /../g
и да прибудет с вами
!
Ребят а не подскажите возможно ли:
В базе есть построчный текст. При выводе через replace на конце строки ставится . Возможно как-то ли вместо на конце заключать строку в теги
?
Блин сорри все теги порезались.
В базе mysql в ячейке есть построчный текст. При выводе через replace на конце строки ставится тег BR. Возможно как-то ли вместо BR на конце заключать каждую строку в тег P
А можно ли заменить текст на пустой символ? Чтобы ничего не было?
Забавное поведение функции:
Привет, спасибо за статью. Есть такая проблема:
Непонятно, почему так работает...
Надо так писать:
я так понял replace работает 1 раз?
т.к. выполняю след.
link = link.replace(/\ /g, '-');
заменяю пробелы на дефис
далее мне нужно заменить в этом же $str все лишние символы слеши скобки и т.д.
ничего не выходит, выручайте!
возможно как-то так:
или если надо убрать все символы не буквы и не цифры и заменить на дефисы, то так:
Спасибо за эту подсказку. Она мне помогла.
А может ли эта функция заменять в тексте разные фрагменты на разные выражения, например "Курица" заменить на "яйцо" и параллельно "волк" заменить на "ягнёнок" ?
ничего не понял, но все равно спс)
автор написал так,что понять может только тот, кто не знал какого-то отдельного момента...
именно поэтому на рынке у нас учебники из США, что авторы просто тупо ленятся объяснить четко и подробно
Вопрос на счёт <<Возращаемого значения>>:
Кто нибудь пояснить может, что эта функция возращает при, так сказать, false. То есть, если искомая строка не найдена: Стандартно: "-1" или булевское значение?
Добавлю и я свой "костыль" по глобальной замене строк. Моя функция производит глобальную замену, в качестве параметров поиска и замены передаются как строки, так и массивы: srch[0] -> repl[0], srch[1] -> repl[1], ... или srch[0] -> rep, srch[1] -> rep, ... В последних двух параметрах можно указать, что вставить перед и после заменяемого фрагмента.
Использование:
Кстати, в примере использования строки 3-4 можно записать еще так:
Привет всем. Подскажите как можно осуществить такую штуку. Нужно, что бы при входе пользователя после ввода его пароль заменялся автоматически на другой.
Здравствуйте! Помогите пожалуйста со скриптом. Есть сайт с музыкой, все названия песен в одну строку. При переносе через код удаляются начальные ковычки и скобки. Ничего придумать больше т.к. не знаю js. Для наглядного примера ссылочка
https://jsfiddle.net/vyr7aq1f/1/
Спасибо.
//может вот так
');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]);
}
возможно из одной строки убирать части которые переданы в другую переменную
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
теперь я не умру с голоду
Здравствуйте.
Подскажите, как при помощи replace (или др) в строке "asdfg 123 mn=bv 587" удалить строку "mn=" и еще 2 символа после нее, т.е. как удалить "mn=bv", но "bv" - неизвестна?
alert(str.replace(/mn=\w+/, ''))
var str = "asdfg 123 mn=bv 587"
alert(str.replace(/mn=.{2}/, '')) // если известно, что ровно 2 ЛЮБЫХ символа (буквы, цифры и т.д)
alert(str.replace(/mn=.+\s/, ' ')) // аналогично, но предполагая, что bv произвольной длины, не содержит пробела и следом есть пробел
Всем привет!
Такой вопрос.
Есть допустим текст: "г. Москва, ул. Ленина 5"
Как в этом тексте сделать замену на: "г.
Москва
, ул. Ленина 5"
Но! С одним условием - поиск по тексту, мы производим словом "москва", т.е. москва - с маленькой буквой, а на выходе текст должен остаться оригинальным, но со вставкой тегов
Извините, но написано так, что нуля понять, что она вообще делает и каким образом, мягко говоря, затруднительно.
Ребят, а как тут поступить?
Вот эту строку: 88002004860
нужно привести к такому виду: 8 800 200 48 60
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);
Почему
str.replace("/\"/g","") не работает?
Хочу удалить все двойные кавычки в строке.
Большое спасибо за статью!!!♥
Подскажите как удалить весь закоментированный текст через JS
В php такой "html.replace(//g, '');" метод работает, а в JS нифига не удаляет!?
А где можно почитать подробнее о синтаксисе всех этих слешей, вопросов и тд? Как я понимаю, он используется не только в replace
Roksa lowicz
Roksa bydgo
Kazimierz roksa
Roksa zary
Roksa wronki
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.