Expression régulière: tout caractère qui n'est PAS une lettre ou un chiffre


113

J'essaie de comprendre l'expression régulière qui correspondra à n'importe quel caractère qui n'est pas une lettre ou un nombre. Ainsi des caractères tels que (,, @, £, () etc ...

Une fois trouvé, je veux le remplacer par un espace vide.

Aucun conseil.

Réponses:


165

Pour faire correspondre autre chose qu'une lettre ou un chiffre, vous pouvez essayer ceci:

[^a-zA-Z0-9]

Et pour remplacer:

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

17
\west pour les caractères Word et est exactement le même que [a-zA-Z0-9_](notez que le trait de soulignement est considéré comme un caractère de mot.) ... donc le raccourci seraitstr.replace(/[^\w]/g, ' ')
Joel Mellon

mais il comprendra également de nombreuses lettres Unicode! existe-t-il un moyen d'exclure les lettres unicode?
Clite Tailor

1
Pour inclure des caractères Unicode, vous pouvez utiliser [^ \ p {L} 0-9]
Dave

@Dave: Depuis 2018, vous ne pouvez pas sans polyfill, apparemment ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

y a-t-il un moyen, au lieu de répéter avec un espace ... remplacer par "\" suivi du caractère qui a été identifié? Comme ceci: faites ce dfj, dsf7lfsd .sdklfj dans ce dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

39

Cette expression régulière correspond à tout ce qui n'est pas une lettre, un chiffre ou un caractère de soulignement ( _).

\W

Par exemple en JavaScript:

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

Je crois qu'il cherche / (_ | \ W) / g, pour correspondre à tout ce qui n'est pas un chiffre ou une lettre (langue anglaise)
kennebec

@sbmaxx Je veux tout remplacer sauf &, (,) ces caractères. comment pourrais-je ajouter cette condition dans le regex actuel.
K Pal

17

Tu recherches:

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

Cela remplace tous les caractères non alphanumériques par un espace.

Le "g" à la fin remplace toutes les occurrences.

Au lieu de spécifier az ( en minuscules) et AZ (majuscules) , vous pouvez également utiliser l'en-sensible à la casse Option: /[^a-z0-9]/gi.


Cela correspondra-t-il également aux espaces? J'ai besoin d'espaces à garder. Merci.
James Jeffery

Les caractères d'espacement correspondraient, mais seraient alors remplacés par des caractères d'espacement, donc en fait cela les laisserait seuls (un espace restera un espace).
jimbo


5

essayez de faire str.replace (/ [^ \ w] /); Il remplacera tous les non-alphabets et les nombres de votre chaîne!

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


2
Une réponse de travail serait str.replace(/[^\w]/g, ' '). Si vous n'incluez pas le /gdrapeau, il ne remplacera que la première occurrence. Et si vous ne définissez pas de chaîne de remplacement, ici un espace vide ' ', il sera remplacé par undefinedpartout. Enfin, les traits de soulignement ne seront pas remplacés car ils correspondent \w. Cette réponse ne convient pas parfaitement.
Julien Lirochon

4
  • Faire correspondre les lettres uniquement /[A-Z]/ig
  • Faites correspondre tout ce qui n'est pas des lettres /[^A-Z]/ig
  • Match numéro uniquement /[0-9]/gou/\d+/g
  • Correspond à tout ce qui n'est pas un nombre /[^0-9]/gou/\D+/g
  • Faites correspondre tout ce qui n'est pas un chiffre ou une lettre /[^A-Z0-9]/ig

Il existe d'autres modèles possibles


3

Juste pour que les autres le voient:

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

supprime tous les caractères Unicode non alphabétiques et non numériques.

La source


Je ne sais pas d'où viennent les deux votes positifs, mais en JavaScript (sur lequel porte cette question) il n'y a pas replaceAll, et les \p{..}échappements de propriété ne sont pas largement implémentés.
Nickolay

2

Avez-vous essayé, str = str.replace(/\W|_/g,'');il retournera une chaîne sans aucun caractère et vous pouvez spécifier si un caractère spécial après la barre de tube |pour les attraper également.

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

ou recherchez des chiffres et des lettres et remplacez-les par une chaîne vide (""):

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


1

Pour faire correspondre autre chose qu'une lettre ou un chiffre ou une lettre avec des signes diacritiques comme évous pouvez essayer ceci:

[^\wÀ-úÀ-ÿ]

Et pour remplacer:

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

Inspiré du premier article avec prise en charge des signes diacritiques

la source

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.