Как заменить все вхождения строки в JavaScript - PullRequest
3824 голосов
/ 17 июля 2009

У меня есть эта строка:

"Test abc test test abc test test test abc test test abc"

Doing

str = str.replace('abc', '');

, кажется, удаляет только первое вхождение abc в приведенной выше строке. Как я могу заменить все его вхождения?

Ответы [ 55 ]

1 голос
/ 27 января 2018

Я просто хочу поделиться своим решением, основанным на некоторых функциональных возможностях последних версий JavaScript:

   var str = "Test abc test test abc test test test abc test test abc";

   var result = str.split(' ').reduce((a, b) => {
      return b == 'abc' ? a : a + ' ' + b;   })

  console.warn(result)
1 голос
/ 09 февраля 2019

простейшее решение -

let str = "Test abc test test abc test test test abc test test abc";

str = str.split(" ");
str = str.filter((ele, key)=> ele!=="abc")
str = str.join(" ")
Or Simply - 

str = str.split(" ").filter((ele, key) => ele != "abc").join(" ")
1 голос
/ 07 февраля 2019

Лучшее решение, чтобы заменить любой Символ, мы используем эти indexOf(), includes(), substring() функции, чтобы заменить matched String на provided String в Current String.

  • String.indexOf() предназначена для поиска позиции индекса n th .
  • String.includes() метод определяет, может ли одна строка быть найдена в другой строке, возвращая true или false в зависимости от ситуации.
  • String.substring() предназначена для получения частей строки (preceding, exceding). Добавлена ​​замещающая строка между этими частями для генерации окончательной возвращаемой строки.

Следующая функция позволяет использовать любого персонажа.
где as RegExp не позволит использовать какой-либо специальный символ, например **, а некоторые символы необходимо экранировать, например $.

String.prototype.replaceAllMatches = function(obj) { // Obj format: { 'matchkey' : 'replaceStr' }
    var retStr = this;
    for (var x in obj) {
        //var matchArray = retStr.match(new RegExp(x, 'ig'));
        //for (var i = 0; i < matchArray.length; i++) {
        var prevIndex = retStr.indexOf(x); // matchkey = '*', replaceStr = '$*' While loop never ends.
        while (retStr.includes(x)) {
            retStr = retStr.replaceMatch(x, obj[x], 0);
            var replaceIndex = retStr.indexOf(x);
            if( replaceIndex <  prevIndex + (obj[x]).length) {
                break;
            } else {
                prevIndex = replaceIndex;
            }
        }
    }
    return retStr;
};
String.prototype.replaceMatch = function(matchkey, replaceStr, matchIndex) {
    var retStr = this, repeatedIndex = 0;
    //var matchArray = retStr.match(new RegExp(matchkey, 'ig'));
    //for (var x = 0; x < matchArray.length; x++) {
    for (var x = 0; (matchkey != null) && (retStr.indexOf(matchkey) > -1); x++) {
        if (repeatedIndex == 0 && x == 0) {
            repeatedIndex = retStr.indexOf(matchkey);
        } else { // matchIndex > 0
            repeatedIndex = retStr.indexOf(matchkey, repeatedIndex + 1);
        }
        if (x == matchIndex) {
            retStr = retStr.substring(0, repeatedIndex) + replaceStr + retStr.substring(repeatedIndex + (matchkey.length));
            matchkey = null; // To break the loop.
        }
    }
    return retStr;
};

Мы также можем использовать объект регулярного выражения для сопоставления текста с шаблоном. Ниже приведены функции, которые будут объектом регулярного выражения.

Вы получите SyntaxError, когда используете неправильный шаблон регулярных выражений, например '**'.

  • String.replace() используется для замены указанной строки указанной строкой.
  • String.match() Функция определяет, сколько раз строка повторяется.
  • RegExp.prototype.test метод выполняет поиск соответствия между регулярным выражением и указанной строкой. Возвращает true или false.
String.prototype.replaceAllRegexMatches = function(obj) { // Obj format: { 'matchkey' : 'replaceStr' }
    var retStr = this;
    for (var x in obj) {
        retStr = retStr.replace(new RegExp(x, 'ig'), obj[x]);
    }
    return retStr;
};

Обратите внимание, что регулярные выражения пишутся без кавычек.


Примеры использования вышеуказанных функций:

var str = "yash yas $dfdas.**";
console.log('String : ', str);

// No need to escape any special Character
console.log('Index Matched replace : ', str.replaceMatch('as', '*', 2) );
console.log('Index Matched replace : ', str.replaceMatch('y', '~', 1) );
console.log('All Matched replace : ', str.replaceAllMatches({'as' : '**', 'y':'Y', '$':'-'}));
console.log('All Matched replace : ', str.replaceAllMatches({'**' : '~~', '$':'&$&', '&':'%', '~':'>'}));

// You need to escape some special Characters
console.log('REGEX All Matched replace : ', str.replaceAllRegexMatches({'as' : '**', 'y':'Y', '\\$':'-'}));

Результат:

String :  yash yas $dfdas.**
Index Matched replace :  yash yas $dfd*.**
Index Matched replace :  yash ~as $dfdas.**

All Matched replace :  Y**h Y** -dfd**.**
All Matched replace :  yash yas %$%dfdas.>>

REGEX All Matched replace :  Y**h Y** -dfd**.**

0 голосов
/ 07 января 2014

Попробуйте это:

String.prototype.replaceAll = function (sfind, sreplace) {
    var str = this;

    while (str.indexOf(sfind) > -1) {
        str = str.replace(sfind, sreplace);
    }

    return str;
};
0 голосов
/ 22 января 2019

Вы можете попробовать вот так:

пример данных:

var text = "heloo,hai,hei"

text = text.replace(/[,]+/g,'')

или

text.forEach(function(value){
  hasil = hasil.replace(',','')
})```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...