Quiero convertir la siguiente cadena a la salida proporcionada.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
No he encontrado ninguna solución que maneje caracteres especiales como \r
,\n
, \b
, etc.
Básicamente solo quiero deshacerme de cualquier cosa que no sea alfanumérica. Esto es lo que he intentado ...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
Otro intento con múltiples pasos
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
con resultados
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Cualquier ayuda sería apreciada.
Solución de trabajo:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
javascript
regex
Bobby Cannon
fuente
fuente
var Input = "\\test\red\bob\fred\new"
esta cadena no contiene "rojo", por lo que su primer intento es correcto, ¿está probando contra el litoral"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
prueba esto.Respuestas:
Eliminar caracteres no alfanuméricos
La siguiente es la expresión regular correcta / a para quitar caracteres no alfanuméricos de una cadena de entrada:
Tenga en cuenta que
\W
es el equivalente de[^0-9a-zA-Z_]
: incluye el carácter de subrayado. Para eliminar también los guiones bajos, por ejemplo:La entrada está mal formada
Dado que la cadena de prueba contiene varios caracteres escapados, que no son alfanuméricos, los eliminará.
Una barra invertida en la cadena necesita escapar si se toma literalmente:
Manejo de cuerdas malformadas
Si no puede escapar de la cadena de entrada correctamente (¿por qué no?), O si proviene de algún tipo de fuente no confiable / mal configurada, puede hacer algo como esto:
Tenga en cuenta que la representación json de una cadena incluye las comillas:
Pero también son eliminados por la expresión regular de reemplazo.
fuente
\W
con[_\W]
(que se usa en la pregunta) o similar eliminaría los guiones bajos.Todas las respuestas actuales todavía tienen peculiaridades, lo mejor que se me ocurrió fue:
Aquí hay un ejemplo que captura cada tecla que pude encontrar en el teclado:
Salidas: '123abcABC'
fuente
input.replace(/\W/g, '')
deja en el_
en una cadena. @Deminetix tiene razón,string.replace(/[^A-Za-z0-9]/g, '');
funciona mejor ya que elimina todos los caracteres no alfanuméricos de la cadena.El problema no es cómo reemplaza los caracteres, sino cómo ingresa la cadena.
Es sólo la primera barra invertida en la entrada que es una barra invertida, los otros son parte de los caracteres de control
\r
,\b
,\f
y\n
.Como esas barras invertidas no son caracteres separados, sino parte de la notación para escribir un solo carácter de control, no se pueden eliminar por separado. Es decir, no puede eliminar la barra diagonal inversa
\n
ya que no son dos caracteres separados, es la forma en que escribe el carácter de controlLF
o el salto de línea .Si desea convertir esa entrada en la salida deseada, necesitará reemplazar cada carácter de control con la letra correspondiente, por ejemplo, reemplazar el carácter
\n
con el caráctern
.Para reemplazar un carácter de control, debe usar un conjunto de caracteres como
[\r]
, ya que\r
tiene un significado especial en una expresión regular:Demostración: http://jsfiddle.net/SAp4W/
fuente
puedes probar esta expresión regular:
fuente
Esto elimina todos los caracteres no alfanuméricos, conserva las mayúsculas y los espacios entre las palabras.
fuente
Aquí hay un ejemplo que puedes usar,
fuente
Si desea tener esta
\\test\red\bob\fred\new
cadena, debe escapar de todas las barras invertidas (\
). Cuando escribe\\test\\red\\bob\\fred\\new
su cadena en realidad contiene barras invertidas simples. Puede estar seguro de que esto imprimirá su cadena.Entonces, si se escapan las barras invertidas en su cadena
myString.replace(/\W/g,'')
, funcionará normalmente.fuente