una tablas tabla obtener ejemplos datos con agregar javascript string replace character-replacement

tablas - obtener datos de una tabla html javascript



¿Cómo reemplazo un personaje en un índice particular en JavaScript? (17)

Tengo una cadena, digamos Hello world y necesito reemplazar el char en el índice 3. ¿Cómo puedo reemplazar un char especificando un índice?

var str = "hello world";

Necesito algo como

str.replaceAt(0,"h");


@CemKalyoncu: ¡Gracias por la gran respuesta!

También lo adapté ligeramente para hacerlo más parecido al método Array.splice (y tomé en cuenta la nota de @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!"


Digamos que desea reemplazar el índice Kth (índice basado en 0) con ''Z'' . Podrías usar Regex para hacer esto.

var re = var re = new RegExp("((.){" + K + "})((.){1})") str.replace(re, "$1A$`");


El trabajo con vectores suele ser más efectivo para contactar con String.

Sugiero la siguiente función:

String.prototype.replaceAt=function(index, char) { var a = this.split(""); a[index] = char; return a.join(""); }

Ejecutar este fragmento:

String.prototype.replaceAt=function(index, char) { var a = this.split(""); a[index] = char; return a.join(""); } var str = "hello world"; str = str.replaceAt(3, "#"); document.write(str);


En JavaScript, las cadenas son inmutables , lo que significa que lo mejor que puedes hacer es crear una nueva cadena con el contenido modificado y asignar la variable para que apunte a ella.

Tendrá que definir la función replaceAt() usted mismo:

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

Y úsalo así:

var hello="Hello World"; alert(hello.replaceAt(2, "!!")); //should display He!!o World


En Javascript las cadenas son inmutables, así que tienes que hacer algo como

var x = "Hello world" x = x.substring(0, i) + ''h'' + x.substring(i+1);

Para reemplazar el carácter en x en i con ''h''


Esto funciona similar a Array.splice :

String.prototype.splice = function (i, j, str) { return this.substr(0, i) + str + this.substr(j, this.length); };


Hay muchas respuestas aquí, y todas se basan en dos métodos:

  • MÉTODO 1: divide la cadena usando dos subcadenas y rellena el carácter entre ellas
  • MÉTODO 2: convierte la cadena en una matriz de caracteres, reemplaza un miembro de la matriz y únete a ella

Personalmente, usaría estos dos métodos en diferentes casos. Dejame explicar.

@FabioPhms: Tu método fue el que usé inicialmente y temía que fuera malo en una cadena con muchos caracteres. Sin embargo, la pregunta es ¿qué son muchos personajes? Lo probé en 10 párrafos de "lorem ipsum" y tardé unos milisegundos. Luego lo probé en una cadena 10 veces más grande, realmente no había una gran diferencia. Hm

@vsync, @Cory Mawhorter: Sus comentarios son inequívocos; Sin embargo, una vez más, ¿qué es una cadena grande? Estoy de acuerdo en que para 32 ... 100kb, el rendimiento debería ser mejor y se debería usar subcadena-variante para esta única operación de reemplazo de caracteres.

¿Pero qué pasará si tengo que hacer algunos reemplazos?

Necesitaba realizar mis propias pruebas para demostrar qué es más rápido en ese caso. Digamos que tenemos un algoritmo que manipulará una cadena relativamente corta que consta de 1000 caracteres. Esperamos que en promedio cada carácter en esa cadena sea reemplazado ~ 100 veces. Entonces, el código para probar algo como esto es:

var str = "... {A LARGE STRING HERE} ..."; for(var i=0; i<100000; i++) { var n = '''' + Math.floor(Math.random() * 10); var p = Math.floor(Math.random() * 1000); // replace character *n* on position *p* }

He creado un violín para esto, y está here . Hay dos pruebas, TEST1 (subcadena) y TEST2 (conversión de matriz).

Resultados:

  • TEST1: 195ms
  • TEST2: 6ms

¡Parece que la conversión de matrices supera la subcadena en 2 órdenes de magnitud! Entonces, ¿qué demonios pasó aquí?

Lo que realmente sucede es que todas las operaciones en TEST2 se realizan en la propia matriz, utilizando una expresión de asignación como strarr2[p] = n . La asignación es realmente rápida en comparación con la subcadena en una cadena grande, y está claro que va a ganar.

Entonces, todo se trata de elegir la herramienta adecuada para el trabajo. Otra vez.


Hice una función que hace algo similar a lo que pides, comprueba si un carácter en cadena está en una matriz de caracteres no permitidos si es que lo reemplaza con ""

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


Los métodos aquí son complicados. Lo haría de esta manera:

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

Esto es tan simple como se pone.


No hay ninguna función de replaceAt en JavaScript. Puede usar el siguiente código para reemplazar cualquier carácter en cualquier cadena en la posición especificada:

function Rep() { var str = ''Hello World''; str = setCharAt(str,4,''a''); alert(str); } function setCharAt(str,index,chr) { if(index > str.length-1) return str; return str.substr(0,index) + chr + str.substr(index+1); }

<button onclick="Rep();">click</button>


One-liner usando String.replace con devolución de llamada:

// 0 - index to replace, ''f'' - replacement string ''dog''.replace(/./g, (c, i) => i == 0? ''f'': c) // "fog"


Puede extender el tipo de cadena para incluir el método de inserción:

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

Entonces puedes llamar a la función:


Sé que esto es antiguo, pero la solución no funciona con un índice negativo, así que le agrego un parche. espero que ayude a alguien

String.prototype.replaceAt=function(index, character) { if(index>-1) return this.substr(0, index) + character + this.substr(index+character.length); else return this.substr(0, this.length+index) + character + this.substr(index+character.length); }


Si desea reemplazar los caracteres en una cadena, debe crear cadenas mutables. Estos son esencialmente matrices de caracteres. Podrías crear una fábrica:

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

Luego puede acceder a los caracteres y toda la matriz se convierte en cadena cuando se usa como cadena:

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!"


Usted no puede Tome los caracteres antes y después de la posición y concat en una nueva cadena:

var s = "Hello world"; var index = 3; s = s.substr(0, index) + ''x'' + s.substr(index + 1);


function dothis() { var x = document.getElementById("x").value; var index = document.getElementById("index").value; var text = document.getElementById("text").value; var arr = x.split(""); arr.splice(index, 1, text); var result = arr.join(""); document.getElementById(''output'').innerHTML = result; console.log(result); } dothis();

<input id="x" type="text" value="White Dog" placeholder="Enter Text" /> <input id="index" type="number" min="0"value="6" style="width:50px" placeholder="index" /> <input id="text" type="text" value="F" placeholder="New character" /> <br> <button id="submit" onclick="dothis()">Run</button> <p id="output"></p>

Este método es bueno para cadenas de longitud pequeña, pero puede ser lento para texto más grande.

var x = "White Dog"; var arr = x.split(""); // ["W", "h", "i", "t", "e", " ", "D", "o", "g"] arr.splice(6, 1, ''F''); var result = arr.join(""); // "White Fog" /* Here 6 is starting index and 1 is no. of array elements to remove and final argument ''F'' is the new character to be inserted. */


str = str.split(''''); str[3] = ''h''; str = str.join('''');