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.

James Jeffery
la source

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, ' ');
Darin Dimitrov
la source
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"
sbmaxx
la source
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.

favo
la source
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, ' ')

aayushi
la source
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

Youssef AbouEgla
la source
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

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

Juan Gaitán
la source
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

aloisdg passe à codidact.com
la source