El resto busca espacio pero no espacios en blanco o tiene la negación en el lugar equivocado para negar realmente.
Zachary Scott,
\ w también pone de relieve los caracteres de subrayado, que es un carácter no alfanumérico
Tudor Constantin
¡Ajá! Voy a modificar, no lo sabía. Espero que funcione de manera diferente para diferentes motores, pero también podría darle al OP la respuesta segura.
Luke Sneeringer
2
Votaron a favor porque esto no capturará caracteres no latinos, ni caracteres latinos "especiales".
Damian
16
Si desea tratar los caracteres latinos acentuados (p. Ej. À Ñ) como letras normales (es decir, evite combinarlos también), también deberá incluir el rango Unicode apropiado ( \ u00C0- \ u00FF ) en su expresión regular, por lo que se vería así:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^ niega lo que sigue
a-zA-Z coincide con letras mayúsculas y minúsculas
\d coincide con dígitos
\s coincide con el espacio en blanco (si solo desea unir espacios, reemplácelo con un espacio)
: coincide con un colon
\u00C0-\u00FF coincide con el rango Unicode para caracteres latinos acentuados.
nótese bien. La coincidencia de rango Unicode podría no funcionar para todos los motores regex, pero lo anterior ciertamente funciona en Javascript (como se ve en este bolígrafo en Codepen).
nb2. Si no le preocupa que coincidan los guiones bajos, puede reemplazarlos a-zA-Z\dcon \wletras, dígitos y guiones bajos.
Esta gama contiene algunos caracteres que no sean alfanuméricos (U + 00D7 y U + 00F7), y excluye una gran cantidad de caracteres acentuados válidos de idiomas no occidentales como el polaco, checo, vietnamita, etc.
tripleee
1
Votó a favor de la descripción de cada parte de la RegEx.
Votaron a favor porque esto no capturará caracteres no latinos, ni caracteres latinos "especiales".
Damian
14
Es fácil rechazar una respuesta y, sin embargo, es más difícil proporcionar información constructiva a la pizarra, por ejemplo, ¿cómo se capturan caracteres no latinos, ni caracteres latinos "especiales"? A partir de mi recuento hasta aquí, ha votado 3 respuestas por la misma razón y, en mi opinión, por un pequeño cambio. Por ejemplo, estoy aquí para encontrar una expresión regular para exactamente lo que se discute en estas respuestas. No me importan los conjuntos de caracteres que no se utilizarán en mi aplicación. Ley de los rendimientos decrecientes.
Aaron podría ser un "pequeño retoque" para un ciudadano estadounidense, pero muy relevante para ... el resto de este planeta.
Esta es la única respuesta aquí que trata correctamente con los alfabéticos acentuados Unicode de manera adecuada. Lamentablemente, no todos los motores regex admiten esta función (incluso Python carece de ella, a partir de 3.8, a pesar de que su motor regex está aparentemente basado en PCRE).
tripleee
1
Eliminaré Python de la respuesta, pensé que lo probé pero aparentemente no. Gracias por señalar eso.
Esto parece repetir la respuesta aceptada de 2011. Los anclajes ^y lo $confinan para que coincida con líneas enteras y el *cuantificador significa que también coincide con líneas vacías.
tripleee
0
En JavaScript:
/[^\w_]/g
^negación, es decir, seleccione cualquier cosa que no esté en el siguiente conjunto
\w cualquier carácter de palabra (es decir, cualquier carácter alfanumérico, más subrayado)
_ niega el guión bajo, ya que se considera un carácter de "palabra"
Ejemplo de uso - const nonAlphaNumericChars = /[^\w_]/g;
/[^a-zA-Z0-9\s\:]*/
Respuestas:
fuente
\d
y\s
son extensiones de Perl que por lo general no son compatibles con las herramientas más antiguos, comogrep
,sed
,tr
,lex
, etc.Esto debería hacerlo:
fuente
Si desea tratar los caracteres latinos acentuados (p. Ej. À Ñ) como letras normales (es decir, evite combinarlos también), también deberá incluir el rango Unicode apropiado ( \ u00C0- \ u00FF ) en su expresión regular, por lo que se vería así:
^
niega lo que siguea-zA-Z
coincide con letras mayúsculas y minúsculas\d
coincide con dígitos\s
coincide con el espacio en blanco (si solo desea unir espacios, reemplácelo con un espacio):
coincide con un colon\u00C0-\u00FF
coincide con el rango Unicode para caracteres latinos acentuados.nótese bien. La coincidencia de rango Unicode podría no funcionar para todos los motores regex, pero lo anterior ciertamente funciona en Javascript (como se ve en este bolígrafo en Codepen).
nb2. Si no le preocupa que coincidan los guiones bajos, puede reemplazarlos
a-zA-Z\d
con\w
letras, dígitos y guiones bajos.fuente
Prueba esto:
Ejemplo de JavaScript:
Vea un ejemplo en línea:
http://jsfiddle.net/vhMy8/
fuente
Sin alfanuméricos, espacios en blanco o '_'.
fuente
Si quiere decir "caracteres no alfanuméricos", intente usar esto:
fuente
Esta expresión regular funciona para C # , PCRE y Go, por nombrar algunos.
No funciona para JavaScript en Chrome de lo que dice RegexBuddy . Pero ya hay un ejemplo para eso aquí.
Esta parte principal de esto es:
\p{L}
que representa
\p{L}
o\p{Letter}
cualquier tipo de letra de cualquier idioma.La expresión regular completa en sí:
[^\w\d\s:\p{L}]
Ejemplo: https://regex101.com/r/K59PrA/2
fuente
Intenta agregar esto:
Esto me ha funcionado ... :)
fuente
^
y lo$
confinan para que coincida con líneas enteras y el*
cuantificador significa que también coincide con líneas vacías.En JavaScript:
/[^\w_]/g
^
negación, es decir, seleccione cualquier cosa que no esté en el siguiente conjunto\w
cualquier carácter de palabra (es decir, cualquier carácter alfanumérico, más subrayado)_
niega el guión bajo, ya que se considera un carácter de "palabra"Ejemplo de uso -
const nonAlphaNumericChars = /[^\w_]/g;
fuente