Vea mi fragmento de código a continuación:
var list = ['one', 'two', 'three', 'four'];
var str = 'one two, one three, one four, one';
for ( var i = 0; i < list.length; i++)
{
if (str.endsWith(list[i])
{
str = str.replace(list[i], 'finish')
}
}
Quiero reemplazar la última aparición de la palabra uno con la palabra final en la cadena, lo que tengo no funcionará porque el método de reemplazo solo reemplazará la primera aparición. ¿Alguien sabe cómo puedo modificar ese fragmento para que solo reemplace la última instancia de 'uno'
javascript
string
replace
Piedad
fuente
fuente
new RegExp(string)
) y la sintaxis en línea (/something/
). No necesita los caracteres "/" cuando usa el constructor RegExp.` - things like
+,
*,
? `, Paréntesis, corchetes, tal vez otras cosas.Puede usar
String#lastIndexOf
para encontrar la última aparición de la palabra y luego unaString#substring
concatenación para construir la cadena de reemplazo.... o en ese sentido.
fuente
Sé que esto es una tontería, pero me siento creativo esta mañana:
Entonces, realmente, todo lo que necesita hacer es agregar esta función al prototipo String:
Entonces ejecútelo así:
str = str.replaceLast('one', 'finish');
Una limitación que debe saber es que, dado que la función se divide por espacio, probablemente no pueda encontrar / reemplazar nada con un espacio.En realidad, ahora que lo pienso, podrías solucionar el problema del 'espacio' dividiéndote con un token vacío.
fuente
No es tan elegante como las respuestas de expresiones regulares anteriores, pero es más fácil de seguir para los que no son tan inteligentes entre nosotros:
Me doy cuenta de que esto es probablemente más lento y más derrochador que los ejemplos de expresiones regulares, pero creo que podría ser útil como ilustración de cómo se pueden realizar las manipulaciones de cadenas. (También se puede condensar un poco, pero nuevamente, quería que cada paso fuera claro).
fuente
Este es un método que solo usa dividir y unir. Es un poco más legible, así que pensé que valía la pena compartirlo:
fuente
what
en absoluto. p'foo'.replaceLast('bar'); // 'barfoo'
Pensé que respondería aquí ya que esto apareció primero en mi búsqueda de Google y no hay respuesta (fuera de la respuesta creativa de Matt :)) que reemplaza genéricamente la última aparición de una cadena de caracteres cuando el texto a reemplazar podría no estar al final de la cuerda.
fuente
Una respuesta simple sin ninguna expresión regular sería:
fuente
¿No podría simplemente invertir la cadena y reemplazar solo la primera aparición del patrón de búsqueda invertido? Estoy pensando . . .
fuente
Si la velocidad es importante, use esto:
Es más rápido que usar RegExp.
fuente
Código antiguo y grande, pero lo más eficiente posible:
fuente
La solución simple sería utilizar el método de subcadena. Dado que la cadena termina con el elemento de la lista, podemos usar string.length y calcular el índice final para la subcadena sin usar el
lastIndexOf
métodostr = str.substring(0, str.length - list[i].length) + "finish"
fuente
No me gustó ninguna de las respuestas anteriores y se me ocurrió la siguiente
Uso:
¡Espero que ayude!
fuente
Sugeriría usar el paquete replace-last npm.
Esto funciona para reemplazos de cadenas y expresiones regulares.
fuente
fuente