Как я могу выполнить str_replace в 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
Если вы собираетесь использовать регулярные выражения, каковы последствия для производительности по сравнению со встроенными методами замены.
Ответы
Ответ 1
Использование регулярных выражений для замены строк значительно медленнее, чем использование замены строк.
Как показано в 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>
Ответ 2
Вы использовали бы метод replace
:
text = text.replace('old', 'new');
Первый аргумент - это то, что вы ищете, очевидно. Он также может принимать регулярные выражения.
Просто помните, что он не меняет исходную строку. Он возвращает только новое значение.
Ответ 3
Проще говоря:
city_name=city_name.replace(/ /gi,'_');
Заменяет все пробелы на "_"!
Ответ 4
Все эти методы не изменяют исходное значение, возвращают новые строки.
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
Ответ 5
Вы должны написать что-то вроде этого:
var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);
Ответ 6
эта функция заменяет только одно событие. Если вам нужно заменить несколько случаев, вы должны попробовать эту функцию: http://phpjs.org/functions/str_replace:527
Не обязательно.
см. ответ Ганса Кестинга:
city_name = city_name.replace(/ /gi,'_');
Ответ 7
Код, который другие предоставляют вам только для замены одного вхождения, при использовании регулярных выражений заменяет их все (например, @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
Удачи!
Ответ 8
hm.. Вы проверили 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);
Ответ 9
var new_text = text.replace("want", "dont want");
Ответ 10
В 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
Ответ 11
В 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
(global). Если вы не укажете глобальный флаг, будет заменено только первое вхождение подстроки, даже если вы предоставите регулярное выражение в качестве первого аргумента. Итак, давайте заменим все вхождения 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
Вы можете лучше контролировать замещающий текст, используя функцию в качестве второго аргумента.
Ответ 12
Уже есть несколько ответов, использующих 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"));
Ответ 13
Если вам действительно нужен эквивалент PHP str_replace
вы можете использовать Locutus. PHP-версия str_replace
поддерживает больше параметров, чем поддерживает JavaScript String.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)
Ответ 14
У вас есть следующие варианты:
- Заменить первое вхождение
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)
Ответ 15
В 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
используется для глобального сопоставления всех доступных совпадений.
Ответ 16
Метод 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
Ответ 17
Если вы не хотите использовать регулярные выражения, то вы можете использовать эту функцию, которая заменит все в строке
Исходный код:
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");
Ответ 18
Ты можешь использовать
text.replace('old', 'new')
И для одновременного изменения нескольких значений в одной строке, например, для изменения # на строку v и _ на строку w:
text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});
Ответ 19
Использовать JS String.prototype.replace
первым аргументом должен быть шаблон Regex или String, а вторым аргументом должна быть String или функция.
str.replace(regexp|substr, newSubStr|function);
Пример:
var str = 'this is some sample text that я want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr);//this is some sample text that я don't want to replace
Ответ 20
function str_replace($old, $new, $text)
{
return $text.split($old).join($new);
}
Вам не нужны дополнительные библиотеки.
Ответ 21
Добавлен метод 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);