Expressão regular: qualquer caractere que NÃO seja uma letra ou número

112

Estou tentando descobrir a expressão regular que corresponderá a qualquer caractere que não seja uma letra ou um número. Portanto, caracteres como (,, @, £, () etc ...

Uma vez encontrado, quero substituí-lo por um espaço em branco.

Qualquer conselho.

James Jeffery
fonte

Respostas:

165

Para corresponder a qualquer coisa diferente de letra ou número, você pode tentar isto:

[^a-zA-Z0-9]

E para substituir:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');
Darin Dimitrov
fonte
17
\wé para caracteres do Word e é exatamente o mesmo que [a-zA-Z0-9_](observe que o sublinhado é considerado um caractere do word.) ... então a abreviação seriastr.replace(/[^\w]/g, ' ')
Joel Mellon
mas também incluirá muitas letras Unicode! existe alguma maneira de excluir letras Unicode?
Clite Tailor
1
Para incluir caracteres Unicode, você pode usar [^ \ p {L} 0-9]
Dave
@Dave: A partir de 2018 você não pode sem um polyfill, aparentemente ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay
existe uma maneira, em vez de repalce com um espaço ... substituir com "\" seguido pelo caractere que foi identificado? Assim: transformar este dfj, dsf7lfsd .sdklfj neste dfj \, dsf7lfsd \ .sdklfj?
CrazySpy
38

Esta expressão regular corresponde a qualquer coisa que não seja uma letra, dígito ou um caractere de sublinhado ( _).

\W

Por exemplo em JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"
sbmaxx
fonte
Eu acredito que ele está procurando por / (_ | \ W) / g, para corresponder a qualquer coisa que não seja um dígito ou letra (idioma inglês)
kennebec
@sbmaxx Desejo substituir todos, exceto &, (,) esses caracteres. como eu poderia adicionar essa condição no regex atual.
K Pal de
17

Você está procurando por:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

Isso substitui todos os caracteres não alfanuméricos por um espaço.

O "g" no final substitui todas as ocorrências.

Em vez de especificar az (minúsculas) e AZ (maiúsculas), você também pode usar a in-case-sensitive opção: /[^a-z0-9]/gi.

favo
fonte
Ele vai combinar com os espaços também? Preciso de espaços para serem mantidos. Obrigado.
James Jeffery
Os caracteres de espaço corresponderiam, mas seriam substituídos por caracteres de espaço, então, na verdade, isso os deixaria em paz (um espaço permanecerá um espaço).
Jimbo
5

tente fazer str.replace (/ [^ \ w] /); Ele substituirá todos os não alfabetos e números de sua string!

Editar 1: str.replace(/[^\w]/g, ' ')

aayushi
fonte
2
Uma resposta funcional seria str.replace(/[^\w]/g, ' '). Se você não incluir o /gsinalizador, ele substituirá apenas a primeira ocorrência. E se você não definir uma string de substituição, aqui um espaço em branco ' ', ele será substituído por undefinedtodos os lugares. Por fim, os sublinhados não serão substituídos porque correspondem \w. Essa resposta não se encaixa perfeitamente.
Julien Lirochon de
3

Apenas para que outros vejam:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

irá remover quaisquer caracteres Unicode que não sejam letras e não numéricos.

Fonte

Richie
fonte
Não tenho certeza de onde vieram os dois votos positivos, mas em JavaScript (sobre o qual esta questão se refere) não existe replaceAll, e os \p{..}escapes de propriedade não são amplamente implementados.
Nickolay
3
  • Corresponder letras apenas /[A-Z]/ig
  • Combine tudo, não letras /[^A-Z]/ig
  • Apenas número de correspondência /[0-9]/gou/\d+/g
  • Corresponde a qualquer coisa que não seja número /[^0-9]/gou/\D+/g
  • Corresponde a qualquer coisa que não seja número ou letra /[^A-Z0-9]/ig

Existem outros padrões possíveis

Youssef AbouEgla
fonte
2

Se você já tentou, str = str.replace(/\W|_/g,'');ele retornará uma string sem qualquer caractere e você pode especificar se algum caractere especial após a barra vertical |para capturá-los também.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); vai voltar str = 1324567890abcJohnDoe

ou procure dígitos e letras e substitua-os por uma string vazia (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); vai voltar str = '§$)% #$@';

Juan Gaitán
fonte
1

Para combinar qualquer coisa diferente de letra, número ou letra com diacríticos como évocê pode tentar isto:

[^\wÀ-úÀ-ÿ]

E para substituir:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

Inspirado na postagem principal com suporte para diacríticos

fonte

aloisdg mudando para codidact.com
fonte