0
votes

Nodejs Regexp est différent avec Express régulier sur la recherche de chiffres

Je ne sais pas pourquoi il y a différents entre re code> et / ^ text (\ d +)? [.] JSON $ / g code>.

Utilisez une mauvaise expression? P>

$ node -v
v6.15.0

$ node
> list =[ 'Text.json',
   'Text1.json',
   'Text2.json',
   'Text3.json',
   'Text4.json' ]
> re = new RegExp(/^Text(\d+)?[.]json$/g)

> list.filter(f => re.test(f))
[ 'Text.json', 'Text2.json', 'Text4.json' ]

> list.filter(f => /^Text(\d+)?[.]json$/g.test(f))
[ 'Text.json',
  'Text1.json',
  'Text2.json',
  'Text3.json',
  'Text4.json' ]

> String(/^Text(\d+)?[.]json$/g) === String(re)
true


0 commentaires

3 Réponses :


0
votes

Un comportement aussi étrange.

Il suffit de supprimer le drapeau global et que vous avez terminé. p>

p>

var list =[ 'Text.json',
   'Text1.json',
   'Text2.json',
   'Text3.json',
   'Text4.json' ]
var re = new RegExp(/^Text(\d+)?[.]json$/)

var filter1 = list.filter(f => re.test(f))
console.log('filter1', filter1)

var filter2 = list.filter(f => /^Text(\d+)?[.]json$/g.test(f))
console.log('filter2', filter2)

var comp = String(/^Text(\d+)?[.]json$/) === String(re)
console.log('comp', comp)


0 commentaires

0
votes

/ g Le drapeau donne la même RegEXP N'oubliez pas la position finale de la dernière correspondance réussie et la recherche de cette position même dans la chaîne différente de la prochaine fois. Si vous utilisez Regexp littéral, une expression régulière est recréée à chaque fois et ce comportement n'a aucun impact.

voir la note et des exemples Dans cette section sur MDN.


0 commentaires

0
votes

Retirez la refonte de l'arnatation SLASHES lors de l'utilisation du constructeur:

re = nouveau regexp (/ ^ text (\ d +)? [.] JSON $ / g) devient: xxx


0 commentaires