2012-05-28 10 views
5

¿Es posible sustituir el carácter en una posición particular con una cadenacarácter Sustitución en un índice en particular con una cadena en Javascript, Jquery

Digamos que hay decir una cadena: "I am a man"

I desea reemplazar el carácter en 7 con la cadena "wom" (independientemente de cuál fue el carácter original).

El resultado final debe ser: "I am a woman"

+1

Ver también aquí http://stackoverflow.com/questions/1431094/how-do-i-replace-a-character-at-a-particular-index-in-javascript (se puede utilizar la función de la respuesta seleccionada, funciona también para cadenas). – Ixx

+0

@lxx no, esa función no es buena ya que reemplaza tantos caracteres en la cadena fuente como se suministraron: el OP aquí solo quiere que se reemplace un carácter. – Alnitak

+0

Alnitak es correcto. –

Respuesta

17

Las cadenas son inmutables en Javascript - no se puede modificarlos "en su lugar".

Tendrá que cortar la cadena original, y devolver una nueva cadena hecha de todas las piezas:

// replace the 'n'th character of 's' with 't' 
function replaceAt(s, n, t) { 
    return s.substring(0, n) + t + s.substring(n + 1); 
} 

NB: No añadir a String.prototype porque en algún rendimiento de los navegadores es muy malo si agrega funciones al prototype de tipos incorporados.

+0

Realmente son inmutables, pero eso no significa que tenga que hacer cálculos de índice. Ya hay un método de reemplazo. Ver mi respuesta – Slavo

+0

@Slavo '.replace' no admite índices basados ​​en posición, a menos que construya una expresión regular innecesariamente complicada. – Alnitak

+0

Estoy de acuerdo. Los ejemplos dados en la pregunta no necesitan RegEx complejo. Supongo que todo depende del caso de uso real. – Slavo

1

O podría hacerlo de esta manera, utilizando funciones de matriz.

var a='I am a man'.split(''); 
a.splice.apply(a,[7,1].concat('wom'.split(''))); 
console.log(a.join(''));//<-- I am a woman 
Cuestiones relacionadas