Как я могу выполнить замену str в JavaScript, заменив текст в JavaScript?
Я хочу использовать 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
Если вы собираетесь в regex, каковы последствия для производительности в сравнение со встроенными методами замены.
20 ответов:
использование регулярного выражения для замены строки значительно медленнее, чем использование замены строки.
Как показано На см. Этот тест 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
способ:text = text.replace('old', 'new');
первый аргумент-это то, что вы ищете, это очевидно. Он также может принимать регулярные выражения.
просто помните, что он делает не изменить исходную строку. Возвращает новое значение.
все эти методы не изменяют исходное значение, возвращает новые строки.
var city_name = 'Some text with spaces';
заменяет 1-е место С _
city_name.replace(' ', '_'); // Returns: Some_text with spaces
заменяет все пробелы С _ с помощью regex. Если вам нужно использовать регулярное выражение, то я рекомендую протестировать его с 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 "приведет к тому, что"это какой-то образец текста, который я не хочу заменять".
чтобы получить краткое руководство по регулярным выражениям, идти here:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
Чтобы узнать больше оstr.replace()
, вперед here:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace
Удачи вам!
эта функция заменяет единственный явление.. если вам нужно заменить несколько раз вы должны попробовать эту функцию: http://phpjs.org/functions/str_replace:527
не обязательно. смотрите ответ Ганса Кестинга:
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);
в 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
обратите внимание, что вы не заключаете шаблон регулярного выражения в кавычки, которые сделают его строкой, а не объектом регулярного выражения. Сделать замена без учета регистра вам необходимо предоставить дополнительный флаг
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
вы можете иметь больше контроля над заменяющий текст, используя функцию в качестве второго аргумента.
уже есть несколько ответов с помощью str.заменить() (что достаточно справедливо для этого вопроса) и
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"));
если вы действительно хотите эквивалент PHP
str_replace
можно использовать Locutus. PHP-версияstr_replace
поддержка больше вариант, то что JavaScriptString.prototype.replace
поддерживает. Например теги://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
у вас есть следующие варианты:
- заменить первое вхождение
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; };
Если вы не хотите использовать regex, то вы можете использовать эту функцию, которая заменяет в строке
Исходный Код:
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");
можно использовать
text.replace('old', 'new')
и изменить несколько значений в одной строке сразу, например изменить # на строку v и _ на строку w:
text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});
использовать JS
String.prototype.replace
первый аргумент должен быть шаблоном или строкой регулярного выражения, а второй аргумент должен быть строкой или функцией.
str.replace(regexp|substr, newSubStr|function);
Ex:
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
добавлен метод
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);