/ / Regex qui se comporte mal - javascript, regex

Regex se comporte mal - javascript, regex

J'ai utilisé le RegEx /[ -~]/i en JavaScript pendant un moment maintenant et a constaté que cela fonctionne bien pour tester tout Caractère ASCII incluant l'espace. Aujourd'hui j'ai accidentellement utilisé /^[ -~]$/i et trouvé beaucoup à ma grande surprise que /^[ -~]$/i.test("Stackoverflow is great") échoué en raison du caractère d'espace. Ma compréhension des regexes est plutôt limitée, mais malgré tout, je ne vois pas ce que je fais mal ici. Peut-être que quelqu'un ici peut nous éclairer sur ce qui se passe?

Réponses:

4 pour la réponse № 1

Vous manquez un quantificateur, un + ou *:

alert(/^[ -~]*$/i.test("Stackoverflow is great"));

Sans le quantificateur, une classe de caractères correspond juste 1 symbole. Vous avez besoin de ce quantificateur dans ce cas car vous avez ajouté des ancres qui doivent être appariées au début de la chaîne (^) et à la fin de la chaîne ($).

Notez que * veux dire faire correspondre 0 ou plusieurs occurrences du sous-modèle précédent, et + correspond à 1 ou plusieurs occurrences.

Et c'est vrai pour ce qui correspond à votre expression rationnelle car le trait d'union crée une plage entre un espace et un tilde:

entrer la description de l'image ici