Как я могу выполнить 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

У вас есть следующие варианты:

  1. Заменить первое вхождение

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);