Я хочу использовать str_replace
или аналогичную альтернативу для замены текста в JavaScript.
var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");
должен дать
this is some sample text that i dont want to replace
Если вы собираетесь использовать регулярное выражение, каковы последствия для производительности по сравнению со встроенными методами замены.
str_replace
также принимает два массива одинаковой длины, где каждая строка в первом массиве заменяется строкой во втором массиве с тем же индексом. Пожалуйста, посетите stackoverflow.com/a/5069776/296430, чтобы узнать о единственной правильной функции, которую я нашел до сих пор, которая имитирует это точное поведение в javascript.Ответы:
Использование регулярного выражения для замены строки значительно медленнее, чем использование замены строки.
Как показано на JSPerf , вы можете иметь разные уровни эффективности для создания регулярного выражения, но все они значительно медленнее, чем простая замена строки. Регулярное выражение работает медленнее, потому что :
Для простого тестового запуска на странице JS perf я задокументировал некоторые результаты:
<script> // Setup var startString = "xxxxxxxxxabcxxxxxxabcxx"; var endStringRegEx = undefined; var endStringString = undefined; var endStringRegExNewStr = undefined; var endStringRegExNew = undefined; var endStringStoredRegEx = undefined; var re = new RegExp("abc", "g"); </script> <script> // Tests endStringRegEx = startString.replace(/abc/g, "def") // Regex endStringString = startString.replace("abc", "def", "g") // String endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp endStringStoredRegEx = startString.replace(re, "def") // saved regex </script>
Результаты для Chrome 68 следующие:
String replace: 9,936,093 operations/sec Saved regex: 5,725,506 operations/sec Regex: 5,529,504 operations/sec New Regex String: 3,571,180 operations/sec New Regex: 3,224,919 operations/sec
Для полноты этого ответа (заимствования из комментариев) стоит упомянуть, что
.replace
заменяет только первый экземпляр совпадающего символа. Возможна только замена всех экземпляров на//g
. Можно утверждать, что компромисс производительности и элегантности кода будет хуже при замене нескольких экземпляровname.replace(' ', '_').replace(' ', '_').replace(' ', '_');
или хужеwhile (name.includes(' ')) { name = name.replace(' ', '_') }
источник
.replace
заменяет только первый экземпляр совпадающего символа. Возможна только замена всех экземпляров на//g
. Можно утверждать, что компромисс производительности будет хуже при замене нескольких экземпляровname.replace(' ', '_').replace(' ', '_').replace(' ', '_');
или хужеwhile (name.includes(' ')) { name = name.replace(' ', '_') }
Вы бы использовали
replace
метод:text = text.replace('old', 'new');
Очевидно, первый аргумент - это то, что вы ищете. Он также может принимать регулярные выражения.
Просто помните, что это не меняет исходную строку. Он возвращает только новое значение.
источник
Проще:
city_name=city_name.replace(/ /gi,'_');
Заменяет все пробелы на '_'!
источник
.replace(/\\x3B/g,';')
Все эти методы не изменяют исходное значение, возвращают новые строки.
var city_name = 'Some text with spaces';
Заменяет 1-й пробел на _
city_name.replace(' ', '_'); // Returns: Some_text with spaces
Заменяет все пробелы на _, используя регулярное выражение. Если вам нужно использовать регулярное выражение, я рекомендую протестировать его с помощью https://regex101.com/
city_name.replace(/ /gi,'_'); // Returns: Some_text_with_spaces
Заменяет все пробелы на _ без регулярного выражения . Функциональный способ.
city_name.split(' ').join('_'); // Returns: Some_text_with_spaces
источник
Вы должны написать что-то вроде этого:
var text = "this is some sample text that i want to replace"; var new_text = text.replace("want", "dont want"); document.write(new_text);
источник
Код, который вам дают другие, заменяет только одно вхождение, тогда как использование регулярных выражений заменяет их все (как сказал @sorgit). Чтобы заменить все «хочу» на «не хочу», используйте этот код:
var text = "this is some sample text that i want to replace"; var new_text = text.replace(/want/g, "dont want"); document.write(new_text);
Переменная «new_text» приведет к тому, что «это образец текста, который я не хочу заменять».
Чтобы получить краткое руководство по регулярным выражениям, перейдите сюда:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
Чтобы узнать больше
str.replace()
, перейдите сюда:https://developer.mozilla.org/ en-US / docs / JavaScript / Reference / Global_Objects / String / replace
Удачи!
источник
Не обязательно. см. ответ Ганса Кестинга:
city_name = city_name.replace(/ /gi,'_');
источник
хм .. Вы проверяли replace ()?
Ваш код будет выглядеть так
var text = "this is some sample text that i want to replace"; var new_text = text.replace("want", "dont want"); document.write(new_text);
источник
var new_text = text.replace("want", "dont want");
источник
В JavaScript вы вызываете
replace
метод объекта String, например"this is some sample text that i want to replace".replace("want", "dont want")
, который вернет замененную строку.var text = "this is some sample text that i want to replace"; var new_text = text.replace("want", "dont want"); // new_text now stores the replaced string, leaving the original untouched
источник
В JavaScript есть
replace()
метод объекта String для замены подстрок. У этого метода может быть два аргумента. Первый аргумент может быть строкой или шаблоном регулярного выражения (объект regExp), а второй аргумент может быть строкой или функцией. Примерreplace()
метода, имеющего оба строковых аргумента, показан ниже.var text = 'one, two, three, one, five, one'; var new_text = text.replace('one', 'ten'); console.log(new_text) //ten, two, three, one, five, one
Обратите внимание, что если первым аргументом является строка, заменяется только первое вхождение подстроки, как в приведенном выше примере. Чтобы заменить все вхождения подстроки, вам необходимо предоставить регулярное выражение с
g
(глобальным) флагом. Если вы не предоставите глобальный флаг, будет заменено только первое вхождение подстроки, даже если вы укажете регулярное выражение в качестве первого аргумента. Итак, давайте заменим все вхожденияone
в приведенном выше примере.var text = 'one, two, three, one, five, one'; var new_text = text.replace(/one/g, 'ten'); console.log(new_text) //ten, two, three, ten, five, ten
Обратите внимание, что вы не заключаете шаблон регулярного выражения в кавычки, которые сделают его строкой, а не объектом regExp. Чтобы выполнить замену без учета регистра, вам необходимо предоставить дополнительный флаг,
i
который делает шаблон без учета регистра. В этом случае указанное выше регулярное выражение будет/one/gi
. Обратите внимание наi
добавленный здесь флаг.Если второй аргумент имеет функцию и есть совпадение, функция передается с тремя аргументами. Аргументы, которые получает функция, - это совпадение, позиция совпадения и исходный текст. Вам нужно вернуть то, чем нужно заменить это совпадение. Например,
var text = 'one, two, three, one, five, one'; var new_text = text.replace(/one/g, function(match, pos, text){ return 'ten'; }); console.log(new_text) //ten, two, three, ten, five, ten
Вы можете лучше контролировать заменяющий текст, используя функцию в качестве второго аргумента.
источник
Ты можешь использовать
text.replace('old', 'new')
И чтобы изменить сразу несколько значений в одной строке, например, чтобы изменить # на строку v и _ на строку w:
text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});
источник
Если вам действительно нужен эквивалент PHP,
str_replace
вы можете использовать Locutus . Версия PHPstr_replace
поддерживает больше возможностей, чем то, чтоString.prototype.replace
поддерживает JavaScript . Например теги://PHP $bodytag = str_replace("%body%", "black", "<body text='%body%'>");
//JS with Locutus var $bodytag = str_replace(['{body}', 'black', '<body text='{body}'>')
или массив
//PHP $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//JS with Locutus var $vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]; var $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
Также здесь не используется регулярное выражение, вместо этого используются циклы. Если вы не хотите использовать регулярное выражение, но хотите заменить простую строку, вы можете использовать что-то вроде этого (на основе Locutus)
function str_replace (search, replace, subject) { var i = 0 var j = 0 var temp = '' var repl = '' var sl = 0 var fl = 0 var f = [].concat(search) var r = [].concat(replace) var s = subject s = [].concat(s) for (i = 0, sl = s.length; i < sl; i++) { if (s[i] === '') { continue } for (j = 0, fl = f.length; j < fl; j++) { temp = s[i] + '' repl = r[0] s[i] = (temp).split(f[j]).join(repl) if (typeof countObj !== 'undefined') { countObj.value += ((temp.split(f[j])).length - 1) } } } return s[0] } var text = "this is some sample text that i want to replace"; var new_text = str_replace ("want", "dont want", text) document.write(new_text)
для получения дополнительной информации см. исходный код https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js
источник
Уже есть несколько ответов с использованием str.replace () (что достаточно справедливо для этого вопроса),
regex
но вы можете использовать комбинацию str.split () и join () вместе, что быстрее, чемstr.replace()
иregex
.Ниже рабочий пример:
var text = "this is some sample text that i want to replace"; console.log(text.split("want").join("dont want"));
источник
У вас есть следующие возможности:
var text = "this is some sample text that i want to replace and this i WANT to replace as well."; var new_text = text.replace('want', 'dont want'); // new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well" console.log(new_text)
var text = "this is some sample text that i want to replace and this i WANT to replace as well."; var new_text = text.replace(/want/g, 'dont want'); // new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well console.log(new_text)
var text = "this is some sample text that i want to replace and this i WANT to replace as well."; var new_text = text.replace(/want/gi, 'dont want'); // new_text is "this is some sample text that i dont want to replace and this i dont want to replace as well console.log(new_text)
Подробнее -> здесь
источник
В Javascript замените функцию, доступную для замены подстроки из заданной строки на новую. Использование:
var text = "this is some sample text that i want to replace"; var new_text = text.replace("want", "dont want"); console.log(new_text);
Вы даже можете использовать регулярное выражение с этой функцией. Например, если хотите , чтобы заменить все вхождения
,
с.
.var text = "123,123,123"; var new_text = text.replace(/,/g, "."); console.log(new_text);
Здесь
g
модификатор используется для глобального сопоставления всех доступных совпадений.источник
Способ
replace substring in a sentence
использования React:const replace_in_javascript = (oldSubStr, newSubStr, sentence) => { let newStr = ""; let i = 0; sentence.split(" ").forEach(obj => { if (obj.toUpperCase() === oldSubStr.toUpperCase()) { newStr = i === 0 ? newSubStr : newStr + " " + newSubStr; i = i + 1; } else { newStr = i === 0 ? obj : newStr + " " + obj; i = i + 1; } }); return newStr; };
RunMethodHere
источник
Если вы не хотите использовать регулярное выражение, вы можете использовать эту функцию, которая заменит все в строке
Исходный код:
function ReplaceAll(mystring, search_word, replace_with) { while (mystring.includes(search_word)) { mystring = mystring.replace(search_word, replace_with); } return mystring; }
Как использовать:
var mystring = ReplaceAll("Test Test", "Test", "Hello");
источник
String.prototype.replace
Первый аргумент JS должен быть шаблоном Regex или String, а второй аргумент должен быть String или функцией.str.replace(regexp|substr, newSubStr|function);
Пример:
var str = 'this is some sample text that i want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr); // this is some sample text that i don't want to replace
источник
function str_replace($old, $new, $text) { return ($text+"").split($old).join($new); }
Вам не нужны дополнительные библиотеки.
источник
В ECMAScript 2021 вы можете использовать
replaceAll
можно использовать.const str = "string1 string1 string1" const newStr = str.replaceAll("string1", "string2"); console.log(newStr) // "string2 string2 string2"
источник
Добавлен метод,
replace_in_javascript
который удовлетворит ваши требования. Также обнаружено, что вы пишете строку,"new_text"
вdocument.write()
которой предполагается ссылка на переменнуюnew_text
.let replace_in_javascript= (replaceble, replaceTo, text) => { return text.replace(replaceble, replaceTo) } var text = "this is some sample text that i want to replace"; var new_text = replace_in_javascript("want", "dont want", text); document.write(new_text);
источник