Expresión regular: cualquier carácter que NO sea una letra o un número


112

Estoy tratando de averiguar la expresión regular que coincidirá con cualquier carácter que no sea una letra o un número. Entonces, caracteres como (,, @, £, (), etc.

Una vez encontrado, quiero reemplazarlo con un espacio en blanco.

Algún consejo.

Respuestas:


165

Para hacer coincidir cualquier cosa que no sea una letra o un número, puede intentar esto:

[^a-zA-Z0-9]

Y para reemplazar:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

17
\wes para caracteres de Word y es exactamente igual que [a-zA-Z0-9_](observe que el guión bajo se considera un carácter de palabra) ... por lo que la taquigrafía seríastr.replace(/[^\w]/g, ' ')
Joel Mellon

¡pero también incluirá muchas letras Unicode! ¿Hay alguna forma de excluir letras Unicode?
Clite Tailor

1
Para incluir caracteres Unicode, puede usar [^ \ p {L} 0-9]
Dave

@Dave: A partir de 2018 no se puede sin un polyfill, aparentemente ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

¿Hay alguna manera, en lugar de reemplazar con un espacio ... reemplazar con "\" seguido del carácter que se identificó? Así: ¿convertir este dfj, dsf7lfsd .sdklfj en este dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

38

Esta expresión regular coincide con cualquier cosa que no sea una letra, un dígito o un carácter de subrayado ( _).

\W

Por ejemplo en JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"

Creo que está buscando / (_ | \ W) / g, para que coincida con cualquier cosa no un dígito o letra (idioma Inglés)
kennebec

@sbmaxx Quiero reemplazar todos excepto &, (,) estos caracteres. ¿Cómo podría agregar esta condición en la expresión regular actual?
K Pal

17

Estás buscando:

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

Esto reemplaza todos los caracteres no alfanuméricos con un espacio.

La "g" al final reemplaza todas las apariciones.

En lugar de especificar az (en minúsculas) y AZ (mayúsculas) también se puede utilizar la en-entre mayúsculas y minúsculas opción: /[^a-z0-9]/gi.


¿Coincidirá con los espacios también? Necesito espacios para mantenerlos. Gracias.
James Jeffery

Los caracteres espaciales coincidirían, pero luego serían reemplazados por caracteres espaciales, por lo que en efecto los dejaría solos (un espacio seguirá siendo un espacio).
jimbo


5

intente hacer str.replace (/ [^ \ w] /); ¡Reemplazará todos los números y no alfabetos de su cadena!

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


2
Una respuesta funcional sería str.replace(/[^\w]/g, ' '). Si no incluye la /gbandera, solo reemplazará la primera aparición. Y si no define una cadena de reemplazo, aquí un espacio en blanco ' ', reemplazará por undefinedtodo el lugar. Finalmente, los guiones bajos no serán reemplazados porque coinciden \w. Esta respuesta no encaja perfectamente.
Julien Lirochon

3

Solo para que otros vean:

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

eliminará los caracteres Unicode que no sean letras ni números.

Fuente


No estoy seguro de dónde vinieron los dos votos a favor, pero en JavaScript (de lo que trata esta pregunta) no hay replaceAll, y los \p{..}escapes de propiedad no están ampliamente implementados.
Nickolay

3
  • Coincidir solo con letras /[A-Z]/ig
  • Coincide con cualquier cosa que no sean letras /[^A-Z]/ig
  • Número de coincidencia solamente /[0-9]/go/\d+/g
  • Coincide con cualquier cosa que no sea un número /[^0-9]/go/\D+/g
  • Coincide con cualquier cosa que no sea número o letra /[^A-Z0-9]/ig

Hay otros patrones posibles


2

¿Lo ha probado? str = str.replace(/\W|_/g,'');Devolverá una cadena sin ningún carácter y puede especificar si algún carácter especial después de la barra de tubería |para capturarlos también.

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

o busque dígitos y letras y reemplácelos por una cadena vacía (""):

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


1

Para hacer coincidir cualquier cosa que no sea letra o número o letra con signos diacríticos como é, puede intentar esto:

[^\wÀ-úÀ-ÿ]

Y para reemplazar:

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

Inspirado en el poste superior con soporte para diacríticos

fuente

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.