Rimuovi i caratteri non alfanumerici dalla stringa. Problemi con il carattere

Voglio convertire la seguente stringa nell’output fornito.

Input: "\\test\red\bob\fred\new" Output: "testredbobfrednew" 

Non ho trovato alcuna soluzione che gestisca caratteri speciali come \r , \n , \b , ecc.

Fondamentalmente voglio solo sbarazzarmi di tutto ciò che non è alfanumerico. Ecco cosa ho provato …

 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" 

Un altro tentativo con più passaggi

 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 risultati

 Attempt 1: cleanID("\\test\red\bob\fred\new"); Output 1: "BTESTREDOBFREDNEW" 

Qualsiasi aiuto sarebbe apprezzato.

Soluzione di lavoro:

 Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , ''); Output 1: "testredbobfrednew" 

Rimozione di caratteri non alfanumerici

La seguente è / una espressione regolare corretta per eliminare caratteri non alfanumerici da una stringa di input:

 input.replace(/\W/g, '') 

Nota che \W è l’equivalente di [^0-9a-zA-Z_] – include il carattere di sottolineatura. Per rimuovere anche i underscore, ad esempio:

 input.replace(/[^0-9a-z]/gi, '') 

L’input non è corretto

Poiché la stringa di test contiene vari caratteri di escape, che non sono alfanumerici, li rimuoverà.

Una barra rovesciata nella stringa ha bisogno di essere sfuggita se deve essere presa alla lettera:

 "\\test\\red\\bob\\fred\\new".replace(/\W/g, '') "testredbobfrednew" // output 

Gestire stringhe malformate

Se non riesci a sfuggire correttamente alla stringa di input (perché no?), O proviene da una fonte non affidabile / errata, puoi fare qualcosa del genere:

 JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '') "testredbobfrednew" // output 

Si noti che la rappresentazione JSON di una stringa include le virgolette:

 JSON.stringify("\\test\red\bob\fred\new") ""\\test\red\bob\fred\new"" 

Ma vengono anche rimossi dalla regex di sostituzione.

Tutte le risposte attuali hanno ancora delle stranezze, la cosa migliore che ho potuto inventare era:

 string.replace(/[^A-Za-z0-9]/g, ''); 

Ecco un esempio che cattura tutti i tasti che potrei trovare sulla tastiera:

 var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`'; var stripped = string.replace(/[^A-Za-z0-9]/g, ''); console.log(stripped); 

Uscite: “123abcABC”

Il problema non è con il modo in cui si sostituiscono i caratteri, il problema è con il modo in cui si inserisce la stringa.

È solo il primo backslash nell’input che è un carattere backslash, gli altri fanno parte dei caratteri di controllo \r , \b , \f e \n .

Poiché i backslash non sono caratteri separati, ma parte della notazione per scrivere un singolo carattere di controllo, non possono essere rimossi separatamente. Ad esempio, non è ansible rimuovere la barra rovesciata da \n poiché non si tratta di due caratteri separati, ma del modo in cui si scrive il carattere di controllo LF o avanzamento riga .

Se vuoi acutalmente trasformare quell’input nell’output desiderato, dovrai sostituire ogni carattere di controllo con la lettera corrispondente, ad esempio sostituire il carattere \n con il carattere n .

Per sostituire un personaggio di controllo devi usare un set di caratteri come [\r] , poiché \r ha un significato speciale in un’espressione regolare:

 var input = "\\test\red\bob\fred\new"; var output = input .replace(/[\r]/g, 'r') .replace(/[\b]/g, 'b') .replace(/[\f]/g, 'f') .replace(/[\n]/g, 'n') .replace(/\\/g, ''); 

Demo: http://jsfiddle.net/SAp4W/

puoi provare questa regex:

 value.replace(/[\W_-]/g, ''); 

Questo rimuove tutti i caratteri non alfanumerici, conserva le maiuscole e conserva gli spazi tra le parole.

 function alpha_numeric_filter (string) { const alpha_numeric = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + ' ') let filterd_string = '' for (let i = 0; i < string.length; i++) { let char = string[i] let index = alpha_numeric.indexOf(char) if (index > -1) { filterd_string += alpha_numeric[index] } } return filterd_string } let input = '\\\\test\\red\\bob\\fred\\new' console.log(alpha_numeric_filter(input)) //=> testredbobfrednew let string = '/_&_This!&!! is!@#$% a%^&*() Sentence+=-[]{} 123:;\|\\]||~`/.,>< ' console.log(alpha_numeric_filter(string)) //=> This is a Sentence 

Se si desidera avere questa stringa \\test\red\bob\fred\new , è necessario evitare tutti i backslash ( \ ). Quando scrivi \\test\\red\\bob\\fred\\new tua stringa contiene in realtà solo barre retroverse. Puoi essere sicuro di questo stampando la tua corda.
Quindi, se i backslash nella stringa sono sfuggiti, myString.replace(/\W/g,'') funzionerà normalmente.