Estou procurando uma solução limpa RegEx para substituir
- Todos os caracteres não alfanuméricos
- Todas as novas linhas
- Todas as várias instâncias de espaço em branco
Com um único espaço
Para quem joga em casa ( o seguinte funciona )
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Meu pensamento é que o RegEx provavelmente é poderoso o suficiente para conseguir isso em uma declaração. Os componentes que eu acho que precisam
[^a-z0-9]
- para remover caracteres não alfanuméricos\s+
- corresponda a qualquer coleção de espaços\r?\n|\r
- corresponder a todas as novas linhas/gmi
- global, multilinhas, sem distinção entre maiúsculas e minúsculas
No entanto, não consigo estilizar a regex da maneira correta ( o seguinte não funciona )
text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
Entrada
234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Saída desejada
234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
javascript
regex
replace
alphanumeric
TheGeneral
fonte
fonte
Respostas:
Esteja ciente, isso
\W
deixa o sublinhado . Um equivalente curto para[^a-zA-Z0-9]
seria[\W_]
\W
é a negação da abreviação\w
de[A-Za-z0-9_]
caracteres de palavras (incluindo o sublinhado)Exemplo em regex101.com
fonte
\W
também reconhecerá caracteres não latinos como caracteres que não são de palavras.Jonny 5 me venceu. Eu sugeriria usar o
\W+
sem o\s
como emtext.replace(/\W+/g, " ")
. Isso também abrange espaço em branco.fonte
\W+
,[W+]
bom, feliz ano novo!&
e-
. Alguma dica?Como a
[^a-z0-9]
classe de caracteres contém tudo o que não é alnum, também contém caracteres em branco!fonte
Bem, acho que você só precisa adicionar um quantificador para cada padrão. Além disso, a coisa de retorno de carro é um pouco engraçada:
editar As
\s
partidas coisa\r
e\n
também.fonte
A viu um post diferente que também tinha marcas diacríticas, o que é ótimo
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
fonte
Este é um antigo post meu, as respostas aceitas são boas para a maior parte. No entanto, decidi avaliar cada solução e outra óbvia (apenas por diversão). Gostaria de saber se havia uma diferença entre os padrões regex em diferentes navegadores com cadeias de tamanhos diferentes.
Então, basicamente, eu usei o jsPerf em
Os padrões regex que testei foram
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Eu os carreguei com um comprimento de seqüência de caracteres aleatórios
Exemplo de javascript que eu usei
var newstr = str.replace(/[\W_]+/g," ");
Cada execução consistia em 50 ou mais amostras em cada regex e eu as executava 5 vezes em cada navegador.
Vamos correr nossos cavalos!
Resultados
Verdade seja dita, o Regex nos dois navegadores (levando em consideração o desvio) era quase indistinguível, no entanto, acho que se isso acontecer ainda mais, os resultados se tornarão um pouco mais claros (mas não muito).
Escala teórica para 1 caractere
Eu não levaria muito a esses resultados, já que essas diferenças não são realmente significativas, tudo o que podemos dizer é que a vantagem é mais lenta: o. Além disso, eu estava super entediado.
De qualquer forma, você pode executar o benchmark para si mesmo.
Jsperf Benchmark aqui
fonte
Para substituir por hífens, faça o seguinte:
fonte