Remova caracteres não alfanuméricos da string. Tendo problemas com o caractere

Eu quero converter a seguinte string para a saída fornecida.

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

Não encontrei nenhuma solução que manipule caracteres especiais como \r , \n , \b etc.

Basicamente eu só quero me livrar de qualquer coisa que não seja alfanumérica. Aqui está o que eu tentei …

 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" 

Uma outra tentativa com várias etapas

 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]/ , ""); } 

com resultados

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

Qualquer ajuda seria apreciada.

Solução de trabalho:

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

Removendo caracteres não alfanuméricos

A seguir está o / a regex correto para remover caracteres não alfanuméricos de uma string de input:

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

Note que \W é o equivalente de [^0-9a-zA-Z_] – inclui o caractere de sublinhado. Para também remover sublinhados, por exemplo:

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

A input está malformada

Como a string de teste contém vários caracteres de escape, que não são alfanuméricos, eles serão removidos.

Uma barra invertida na string precisa escaping, se for tomada literalmente:

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

Manipulando cordas malformadas

Se você não for capaz de escaping da string de input corretamente (por que não?), Ou de algum tipo de fonte não confiável / mal configurada – você pode fazer algo assim:

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

Note que a representação json de uma string inclui as aspas:

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

Mas eles também são removidos pela regex de substituição.

Todas as respostas atuais ainda têm peculiaridades, a melhor coisa que eu consegui fazer foi:

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

Aqui está um exemplo que captura todas as chaves que encontrei no teclado:

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

Saídas: ‘123abcABC’

O problema não é como você substitui os caracteres, o problema é como você digita a string.

É apenas a primeira barra invertida na input que é um caractere de barra invertida, os outros fazem parte dos caracteres de controle \r , \b , \f e \n .

Como essas barras invertidas não são caracteres separados, mas parte da notação para gravar um único caractere de controle, eles não podem ser removidos separadamente. Ou seja, você não pode remover a barra invertida de \n , pois não são dois caracteres separados, é a maneira como você escreve o caractere de controle LF ou o feed de linha .

Se você quiser ativar essa input na saída desejada, você precisará replace cada caractere de controle pela letra correspondente, por exemplo, substitua o caractere \n pelo caractere n .

Para replace um caractere de controle, é necessário usar um conjunto de caracteres como [\r] , já que tem um significado especial em uma expressão regular:

 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, ''); 

Demonstração: http://jsfiddle.net/SAp4W/

você pode tentar este regex:

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

Isso remove todos os caracteres não alfanuméricos, preserva a capitalização e preserva os espaços entre as palavras.

 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 você quiser ter esta \\test\red\bob\fred\new , você deve escaping todas as barras invertidas ( \ ). Quando você escreve \\test\\red\\bob\\fred\\new seu string realmente contém barras invertidas simples. Você pode ter certeza disso imprimir sua string.
Portanto, se as barras invertidas em sua string forem escapadas myString.replace(/\W/g,'') funcionará normalmente.