Как заменить символ по определенному индексу в JavaScript? - PullRequest
465 голосов
/ 16 сентября 2009

У меня есть строка, скажем, Hello world, и мне нужно заменить символ в индексе 3. Как я могу заменить символ, указав индекс?

var str = "hello world";

Мне нужно что-то вроде

str.replaceAt(0,"h");

Ответы [ 22 ]

3 голосов
/ 21 мая 2012

@ CemKalyoncu: Спасибо за отличный ответ!

Я также немного изменил его, чтобы сделать его более похожим на метод Array.splice (и учел примечание @Ates):

spliceString=function(string, index, numToDelete, char) {
      return string.substr(0, index) + char + string.substr(index+numToDelete);
   }

var myString="hello world!";
spliceString(myString,myString.lastIndexOf('l'),2,'mhole'); // "hello wormhole!"
2 голосов
/ 19 ноября 2018

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

var strArr = str.split("");

strArr[0] = 'h';

str = strArr.join("");
2 голосов
/ 28 октября 2016

Если вы хотите заменить символы в строке, вы должны создать изменяемые строки. По сути, это массивы символов. Вы можете создать фабрику:

  function MutableString(str) {
    var result = str.split("");
    result.toString = function() {
      return this.join("");
    }
    return result;
  }

Затем вы можете получить доступ к символам, и весь массив преобразуется в строку при использовании в качестве строки:

  var x = MutableString("Hello");
  x[0] = "B"; // yes, we can alter the character
  x.push("!"); // good performance: no new string is created
  var y = "Hi, "+x; // converted to string: "Hi, Bello!"
1 голос
/ 14 февраля 2016

Я сделал функцию, которая делает нечто похожее на то, что вы просите, он проверяет, находится ли символ в строке в массиве недопустимых символов, если он заменяет его на ''

    var validate = function(value){
        var notAllowed = [";","_",">","<","'","%","$","&","/","|",":","=","*"];
        for(var i=0; i<value.length; i++){
            if(notAllowed.indexOf(value.charAt(i)) > -1){
               value = value.replace(value.charAt(i), "");
               value = validate(value);
            }
       }
      return value;
   }
0 голосов
/ 08 февраля 2019

Вы можете использовать следующую функцию для замены Character или String в определенной позиции строки. Чтобы заменить все следующие случаи совпадений, используйте функцию String.prototype.replaceAllMatches().

String.prototype.replaceMatch = function(matchkey, replaceStr, matchIndex) {
    var retStr = this, repeatedIndex = 0;
    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;
};

Тест:

var str = "yash yas $dfdas.**";

console.log('Index Matched replace : ', str.replaceMatch('as', '*', 2) );
console.log('Index Matched replace : ', str.replaceMatch('y', '~', 1) );

Выход:

Index Matched replace :  yash yas $dfd*.**
Index Matched replace :  yash ~as $dfdas.**
0 голосов
/ 30 декабря 2018

Вот версия, которую я придумала, если вы хотите стилизовать слова или отдельные символы по их индексу в реакции / JavaScript.

replaceAt( yourArrayOfIndexes, yourString/orArrayOfStrings ) 

Рабочий пример: https://codesandbox.io/s/ov7zxp9mjq

function replaceAt(indexArray, [...string]) {
    const replaceValue = i => string[i] = <b>{string[i]}</b>;
    indexArray.forEach(replaceValue);
    return string;
}

А вот еще один альтернативный метод

function replaceAt(indexArray, [...string]) {
    const startTag = '<b>';
    const endTag = '</b>';
    const tagLetter = i => string.splice(i, 1, startTag + string[i] + endTag);
    indexArray.forEach(tagLetter);
    return string.join('');
}

И еще один ...

function replaceAt(indexArray, [...string]) {
    for (let i = 0; i < indexArray.length; i++) {
        string = Object.assign(string, {
          [indexArray[i]]: <b>{string[indexArray[i]]}</b>
        });
    }
    return string;
}
0 голосов
/ 07 марта 2011

Методы здесь сложны. Я бы сделал это так:

var myString = "this is my string";
myString = myString.replace(myString.charAt(number goes here), "insert replacement here");

Это так просто, как только может.

0 голосов
/ 15 марта 2019

это легко достижимо с RegExp!

const str = 'Hello RegEx!';
const index = 11;
const replaceWith = 'p';

//'Hello RegEx!'.replace(/^(.{11})(.)/, `$1p`);
str.replace(new RegExp(`^(.{${ index }})(.)`), `$1${ replaceWith }`);

//< "Hello RegExp"
0 голосов
/ 01 октября 2016

Вы можете расширить тип строки, включив метод inset:

String.prototype.insert = function (index,value) {
  return this.substr(0, index) + value + this.substr(index,this.length);
};

var s = "new function";
alert(s.insert(4,"insert string "));

Затем вы можете вызвать функцию:

0 голосов
/ 17 марта 2017

Допустим, вы хотите заменить индекс Kth (индекс на основе 0) на 'Z'. Вы можете использовать Regex для этого.

var re = var re = new RegExp("((.){" + K + "})((.){1})")
str.replace(re, "$1A$`");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...