4 votes

Obtenir tous les caractères qui ne correspondent pas au Pattern d'expression Reg en Javascript

Je ai ci-dessous exigence où un texte saisi doit correspondre à l'un des caractères autorisés ci-dessous et obtenir tous les caractères ne correspondant pas au modèle d'expression régulière.

  1. 0-9
  2. A-Z,a-z

Et des caractères spéciaux comme:

  1. espace,.@,-_&()'/*=:;
  2. retour chariot
  3. fin de ligne

L'expression régulière que j'ai pu construire est la suivante

/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g

Pour un exemple donné, disons input='123.@&-_()/*=:/\';#$%^"~!?[]av'. Les caractères invalides sont '#$%^"~!?[]'.

Voici l'approche que j'ai suivie pour obtenir les caractères non correspondants.

1) Construisez la négation du modèle d'expression régulière autorisé comme ci-dessous.

/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g (veuillez corriger si cette expression régulière est correcte?)

2) Utilisez la fonction replace pour obtenir tous les caractères

var nomatch = '';        
for (var index = 0; index < input.length; index++) {
    nomatch += input[index].replace(/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g, '');
}

donc nomatch='#$%^"~!?[]' // enfin

Mais ici, la fonction replace retourne toujours un seul caractère non apparié. donc en utilisant une boucle pour tout obtenir. Si l'entrée comporte 100 caractères, elle boucle 100 fois et est inutile.

Existe-t-il une meilleure approche pour obtenir tous les caractères ne correspondant pas au modèle d'expression régulière dans les lignes ci-dessous.

  1. Une meilleure expression régulière pour obtenir les caractères non autorisés (que la négation de l'expression régulière que j'ai utilisée ci-dessus)?
  2. Éviter les boucles inutiles?
  3. Une approche en une seule ligne?

Un grand merci pour toute aide sur ce point.

5voto

anubhava Points 172509

Vous pouvez le simplifier en utilisant des expressions régulières inversées et en remplaçant tous les caractères autorisés par une chaîne vide afin que la sortie ne contienne que les caractères non autorisés restants.:

var re = /[\w .@,\r\n*=:;&()'\/-]+/g
var input = '123.@&-_()/*=:/\';#$%^"~!?[]av'

var input = input.replace(re, '')

console.log(input);
//=> "#$%^"~!?[]"

Notez également que de nombreux caractères spéciaux n'ont pas besoin d'être échappés à l'intérieur d'une classe de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X