Desejo converter a seguinte string na saída fornecida.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Eu não encontrei qualquer solução que irá lidar com 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"
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"
javascript
regex
Bobby Cannon
fonte
fonte
var Input = "\\test\red\bob\fred\new"
essa string não contém "vermelho", para que sua 1ª tentativa esteja correta, você está testando contra o litteral"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
tente isso.Respostas:
Removendo caracteres não alfanuméricos
A seguir está o / a regex correto para remover caracteres não alfanuméricos de uma sequência de entrada:
Observe que
\W
é o equivalente a[^0-9a-zA-Z_]
- inclui o caractere sublinhado. Para remover também sublinhados, use, por exemplo:A entrada está malformada
Como a cadeia de teste contém vários caracteres de escape, que não são alfanuméricos, ela os removerá.
Uma barra invertida na cadeia precisa ser escapada para que seja tomada literalmente:
Manipulando Cordas Malformadas
Se você não conseguir escapar da string de entrada corretamente (por que não?), Ou se vier de algum tipo de fonte não confiável / configurada incorretamente - você pode fazer algo assim:
Observe que a representação json de uma string inclui as aspas:
Mas eles também são removidos pelo regex de substituição.
fonte
\W
por[_\W]
(que é usado na pergunta) ou similar removeria sublinhados.Todas as respostas atuais ainda têm peculiaridades, a melhor coisa que pude sugerir foi:
Aqui está um exemplo que captura todas as teclas que pude encontrar no teclado:
Saídas: '123abcABC'
fonte
input.replace(/\W/g, '')
sai no_
em uma String. O @Deminetix está certostring.replace(/[^A-Za-z0-9]/g, '');
funciona melhor, pois remove todos os caracteres não alfanuméricos da String.O problema não está em como você substitui os caracteres, mas em como você insere a string.
É apenas a primeira barra invertida na entrada que é um caractere de barra invertida, os outros são parte dos caracteres de controle
\r
,\b
,\f
e\n
.Como essas barras invertidas não são caracteres separados, mas fazem parte da notação para escrever um único controle, eles não podem ser removidos separadamente. Ou seja, você não pode remover a barra invertida
\n
, pois não há dois caracteres separados, é o modo como você escreve o caractere de controleLF
ou o avanço de linha .Se você deseja transformar essa entrada na saída desejada, precisará substituir cada caractere de controle pela letra correspondente, por exemplo, substituir o caractere
\n
pelo caracteren
.Para substituir um caractere de controle, você precisa usar um conjunto de caracteres como
[\r]
, pois\r
possui um significado especial em uma expressão regular:Demonstração: http://jsfiddle.net/SAp4W/
fonte
você pode tentar este regex:
fonte
Isso remove todos os caracteres não alfanuméricos, preserva maiúsculas e espaços entre as palavras.
fonte
Aqui está um exemplo que você pode usar,
fonte
Se você deseja ter essa
\\test\red\bob\fred\new
string, deve escapar de todas as barras invertidas (\
). Quando você escreve,\\test\\red\\bob\\fred\\new
sua string realmente contém barras invertidas. Você pode ter certeza disso imprimindo sua string.Portanto, se as barras invertidas em sua string forem escapadas
myString.replace(/\W/g,'')
, funcionará normalmente.fonte