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.

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

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"

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.


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


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


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


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 = '§$)% #$@';


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.