2011-03-31 32 views
47

¿Existe alguna manera fácil en jQuery para reemplazar la última aparición de un '_' (guión bajo) en una cadena dada?Reemplazar la última aparición de caracteres en la cadena

+0

¿Es siempre el último carácter de la cadena? De lo contrario, eche un vistazo a string.lastIndexOf (searchstring, start) – skarmats

+0

[no necesita jQuery] (http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a -valid-answer-to-a-javascript-question). – zzzzBov

+0

posible duplicado de [Cómo reemplazar la última aparición de caracteres en una cadena usando javascript] (http://stackoverflow.com/questions/3829483/how-to-replace-last-occurrence-of-characters-in-a-string -using-javascript) –

Respuesta

91

No necesita jQuery, solo una expresión regular.

Esto eliminará el último guión:

var str = 'a_b_c'; 
str = str.replace(/_([^_]*)$/,'$1'); //a_bc 

Esto reemplazará con el contenido de la variable replacement:

var str = 'a_b_c', replacement = '!'; 
str = str.replace(/_([^_]*)$/,replacement+'$1'); //a_b!c 
+1

+1 Hurtigkarl :))) – mplungjan

+2

@Martin Jespersen: ¿y si el texto que debe reemplazarse no es el guión bajo sino el contenido de una variable llamada replaceMe? ¿Cómo se debe modificar la expresión regular? – Pierpaolo

+1

@Pierpaolo: Debería crear la expresión regular usando un 'nuevo RegExp', leer todo al respecto aquí: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions - Recuerde escaparse la variable 'replaceMe' por lo que no contiene caracteres especiales que alterarán la expresión regular –

47

No hay necesidad de jQuery ni expresiones regulares

str = str.substring(0,str.length-2)+otherchar

para reemplazar último caracter en una cadena

var pos = str.lastIndexOf('_'); 
str = str.substring(0,pos) + otherchar + str.substring(pos+1) 

para reemplazar última subrayado

o utilizar una de las expresiones regulares Se le obtener en un minuto de alguien :)

+4

+1 para "sin necesidad de jQuery". Es importante saber que JQuery no es la respuesta a todo.Javascript es un lenguaje de programación perfectamente capaz sin tener que empujar todo a través de jquery. – Spudley

+1

@Spudley Tan cierto. Sin embargo, aquí en SO, ninguna respuesta JS está completa sin una versión jQuery;)) – mplungjan

+3

'+ 1' para * no regex * & ***' lastIndexOf (...) 'realiza la búsqueda desde el FIN *** (mejor rendimiento) por lo que la expresión regular actualmente aceptada incluso * no puede * ser más rápida. –

1

reversa de la cadena, reemplazar el carbón, invertir la cadena.

Aquí es un puesto de inversión de la cadena en javascript: How do you reverse a string in place in JavaScript?

+1

Pensé lo mismo, pero luego ejecuté un pequeño punto de referencia comparando la inversión de lastIndexOf: http://jsperf.com/replace-last – fakewaffle

0

que sea sencillo

var someString = "a_b_c"; 
var newCharacter = "+"; 

var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1); 
0

Usted puede utilizar el código

var str="test_String_ABC"; 
 
var strReplacedWith=" and "; 
 
var currentIndex = str.lastIndexOf("_"); 
 
str = str.substring(0, currentIndex) + strReplacedWith + str.substring(currentIndex + 1, str.length); 
 

 
alert(str);

3

¿Qué hay de ¿esta?

function replaceLast(x, y, z){ 
    var a = x.split(""); 
    a[x.lastIndexOf(y)] = z; 
    return a.join(""); 
} 

replaceLast("Hello world!", "l", "x"); // Hello worxd! 
0

Esto es muy similar a la respuesta de mplungjan, pero puede ser un poco más fácil (especialmente si usted tiene que hacer otra manipulación de cadenas justo después y desea mantenerlo como una matriz) De todos modos, yo sólo pensé' d ponerlo allí en caso de que alguien lo prefiera.

var str = 'a_b_c'; 
 
str = str.split(''); //['a','_','b','_','c'] 
 
str.splice(str.lastIndexOf('_'),1,'-'); //['a','_','b','-','c'] 
 
str = str.join(''); //'a_b-c'

El '_' se pueden intercambiar con el carbón que desea reemplazar

Y el '-' puede ser reemplazado con el carbón o la cadena que desea reemplazarlo con

Cuestiones relacionadas