Estoy tan cerca de conseguir esto, pero simplemente no está bien. Todo lo que me gustaría hacer es eliminar el carácter r
de una cadena. El problema es que hay más de una instancia de r
en la cadena. Sin embargo, siempre es el carácter en el índice 4 (por lo tanto, el quinto carácter).
cadena de ejemplo: crt/r2002_2
Lo que quiero: crt/2002_2
Esta función de reemplazo elimina ambos r
mystring.replace(/r/g, '')
Produce: ct/2002_2
Probé esta función:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')
Solo funciona si lo reemplazo con otro personaje. No lo eliminará simplemente.
¿Alguna idea?
javascript
string
replace
character
usuario1293504
fuente
fuente
Respuestas:
reemplazará
/r
con el/
usoString.prototype.replace
.Alternativamente, podría usar expresiones regulares con una bandera global (como lo sugieren Erik Reppen y Sagar Gala , a continuación) para reemplazar todas las ocurrencias con
EDITAR: Dado que todos se divierten mucho aquí y el usuario 1293504 no parece volver pronto para responder preguntas aclaratorias, este es un método para eliminar el enésimo carácter de una cadena:
Dado que user1293504 usó el recuento normal en lugar de un recuento indexado a cero, debemos eliminar 1 del índice, si desea usar esto para replicar cómo
charAt
funciona, no reste 1 del índice en la tercera línea y usetmp.splice(i, 1)
en su lugar.fuente
"/"
Una forma JavaScript funcional simple sería
mystring = mystring.split('/r').join('/')
simple, rápido, se reemplaza globalmente y no necesita funciones ni prototipos
fuente
'/'
Siempre están las funciones de cadena, si sabes que siempre vas a eliminar el cuarto carácter:
fuente
str.slice(0, 0) + str.slice(1, str.length)
elimina el primero ystr.slice(0, str.length-1) + str.slice(str.length, str.length)
elimina el último. (Por supuesto, eliminaría las partes redundantes si sabe que siempre está eliminando la primera o la última, pero si son variables, funcionan tan bien como cualquier otro índice).Tu primer func es casi correcto. Simplemente elimine la bandera 'g' que significa 'global' (editar) y dele un poco de contexto para detectar la segunda 'r'.
Editar: no vi que era la segunda 'r' antes, así que agregué '/'. Necesita \ / para escapar del '/' cuando se utiliza un argumento regEx. Gracias por los votos a favor, pero me equivoqué, así que arreglaré y agregaré más detalles para las personas interesadas en comprender mejor los conceptos básicos de regEx, pero esto funcionaría:
Ahora para la explicación excesiva:
Al leer / escribir un patrón regEx, piense en términos de: <un carácter o conjunto de caracteres> seguido de <un carácter o conjunto de caracteres> seguido de <...
En regEx <un carácter o conjunto de caracteres> podría ser uno a la vez:
Entonces lea como e, seguido de a, seguido de c, etc.
O un <carácter o conjunto de caracteres> podría ser un carácter descrito por una clase de caracteres:
O ampliado para que coincida con una cantidad de caracteres (pero aún así es mejor pensarlo como un elemento único en términos del patrón secuencial):
Así que haz un montón juntos:
Y, por supuesto, he elaborado demasiado, pero mi punto era simplemente que esto:
es una serie de 3 elementos de patrón (una cosa seguida de una cosa seguida de una cosa).
Y así es esto:
Tan extraño como comienza a parecer regEx, todo se descompone en una serie de cosas (cosas potencialmente de varios caracteres) que se suceden secuencialmente. Un punto básico, pero que me llevó un tiempo superar, así que me he pasado de la raya explicándolo aquí, ya que creo que es uno que ayudaría al OP y a otros nuevos en RegEx a comprender lo que está sucediendo. La clave para leer / escribir regEx es dividirlo en esas piezas.
fuente
Para el reemplazo global de '/ r', este código funcionó para mí.
fuente
Solo arregla tu
replaceAt
:Lo llamaría en su
removeAt
lugar. :)fuente
char.length
es cero Debe agregar1
en este caso para omitir el carácter.fuente
replaceAt
no funciona. Debe ser un comentario a la pregunta original en lugar de una respuesta. :)Any thoughts?
.Si siempre es el cuarto personaje en tu cadena, puedes probar:
fuente
Esto se debe a que cuando
char
es igual a""
,char.length
es 0, por lo que sus subcadenas se combinan para formar la cadena original. Con su intento de código, lo siguiente funcionará:fuente
Crear función como a continuación
Para reemplazar dar carácter como a continuación
y para eliminar el carácter en el índice definido, dé el segundo parámetro como una cadena vacía
fuente
Si solo desea eliminar un solo carácter y si conoce el índice de un carácter que desea eliminar, puede usar la siguiente función:
fuente
No me gusta usar la función de reemplazo para eliminar caracteres de la cadena. Esto no es lógico hacerlo así. Por lo general, programo en C # (Sharp), y cada vez que quiero eliminar caracteres de la cadena, uso el método Remove de la clase String, pero no el método Reemplazar, aunque exista, porque cuando estoy a punto de eliminarlo, elimino, No reemplazar. Esto es lógico!
En Javascript, no hay una función de eliminación para la cadena, pero hay una función substr. Puede usar la función substr una o dos veces para eliminar caracteres de la cadena. Puede realizar la siguiente función para eliminar caracteres en el índice de inicio al final de la cadena, al igual que el método c # sobrecarga primero String.Remove (int startIndex):
y / o también puede realizar la siguiente función para eliminar caracteres en el índice de inicio y contar, al igual que la segunda sobrecarga del método c # String.Remove (int startIndex, int count):
¡y luego puede usar estas dos funciones o una de ellas para sus necesidades!
Ejemplo:
Salida: crt / 2002_2
¡Lograr objetivos haciendo técnicas sin lógica puede causar confusión en la comprensión del código y futuros errores, si haces esto mucho en un proyecto grande!
fuente
String.prototype.replace
, que es parte de la API base. Además, entender la eliminación como un caso especial de reemplazo es bastante lógico en lo que respecta a la programación. No debe intentar que su API comprenda todas las palabras en el diccionario de inglés, debe intentar reducir su API a su base ortogonal mínima.La siguiente función funcionó mejor para mi caso:
fuente
La forma más corta sería usar empalme
fuente
c
y el"
)Puedes usar esto:
if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
Explicación:
if ( str[4] === 'r' )
Compruebe si el quinto personaje es un
'r'
str.slice(0, 4)
Corta la cuerda para obtener todo antes de
'r'
+ str.slice(5)
Agrega el resto de la cadena.
Minificado:
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37 bytes!]DEMO:
fuente
fuente
Esta es una mejora de la respuesta simple (omitir la longitud)
Mostrar fragmento de código
fuente
En C # (Sharp), puede hacer un carácter vacío como '\ 0'. Quizás puedas hacer esto:
Busque en Google o navegue por Internet y compruebe si JavaScript le permite crear caracteres vacíos, como lo hace C #. En caso afirmativo, aprenda cómo hacerlo, y tal vez la función replaceAt funcione por fin, ¡y logrará lo que desea!
¡Finalmente ese personaje 'r' será eliminado!
fuente