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

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

первый аргумент-это то, что вы ищете, это очевидно. Он также может принимать регулярные выражения.

просто помните, что он делает не изменить исходную строку. Возвращает новое значение.

более просто:

city_name=city_name.replace(/ /gi,'_');

заменяет все пробелы на '_'!

все эти методы не изменяют исходное значение, возвращает новые строки.

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

обратите внимание, что вы не заключаете шаблон регулярного выражения в кавычки, которые сделают его строкой, а не объектом регулярного выражения. Сделать замена без учета регистра вам необходимо предоставить дополнительный флаг 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 поддержка больше вариант, то что 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)

для получения дополнительной информации см. исходный код https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js

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

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

Если вы не хотите использовать 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);