112 votes

Que signifie l'erreur "Rien à répéter" lors de l'utilisation d'une expression rationnelle en javascript ?

Je suis novice en matière de Regex et j'essaie de l'intégrer à l'un de mes nouveaux projets pour voir si je peux l'apprendre et l'ajouter à mon répertoire de compétences. Cependant, je me heurte à un obstacle.

J'essaie de voir si la saisie de l'utilisateur contient des caractères illégaux en utilisant la fonction .search fonctionnent ainsi :

if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
    ...
}

Cependant, lorsque j'essaie d'exécuter la fonction contenue dans cette ligne, je reçois l'erreur suivante pour cette ligne spécifique :

Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.

]/: Nothing to repeat

Je n'arrive pas à voir ce qui ne va pas dans mon code. Quelqu'un peut-il m'indiquer la bonne direction ?

2voto

Abraham Points 441

Par exemple, j'ai rencontré ce problème dans express node.js lorsque j'ai essayé de créer une route pour les chemins ne commençant pas par /internal

app.get(`\/(?!internal).*`, (req, res)=>{

et après de longues tentatives, cela a fonctionné en le passant en tant qu'objet RegExp à l'aide de new RegExp()

app.get(new RegExp("\/(?!internal).*"), (req, res)=>{

Ceci peut vous aider si vous rencontrez ce problème courant dans le routage.

2voto

David Points 126

Cela peut également se produire si vous commencez une expression rationnelle par ? .

? peut fonctionner comme un quantificateur -- donc ? peut s'attendre à ce que quelque chose d'autre vienne avant, d'où l'erreur "rien à répéter". Rien ne l'a précédé dans la chaîne d'expressions rationnelles, de sorte qu'il n'a pas pu quantifier quoi que ce soit ; il n'y avait rien à répéter / rien à quantifier.

? a également un autre rôle -- si le ? est précédé de ( il peut indiquer le début d'une Affirmation de contournement ou d'une autre construction spéciale. Voir l'exemple ci-dessous.

Si l'on oublie d'écrire le () des parenthèses autour de l'assertion lookbehind suivante ?<=x Cela provoquera l'erreur de l'OP :

C'est faux : const xThenFive = /?<=x5/;

Correct : const xThenFive = /(?<=x)5/;

Le présent /(?<=x)5/ est une recherche positive : nous cherchons un 5 qui est précédé d'un x Par exemple, il correspondrait à l'élément 5 en x563 mais pas le 5 en x652 .

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