Je ne sais pas pourquoi il y a différents entre Utilisez une mauvaise expression? P> re code> et / ^ text (\ d +)? [.] JSON $ / g code>. $ 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
3 Réponses :
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) voir la note et des exemples Dans cette section sur MDN. P> / g code> 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. P>
Retirez la refonte de l'arnatation SLASHES lors de l'utilisation du constructeur:
re = nouveau regexp (/ ^ text (\ d +)? [.] JSON $ / g) CODE> Strike>
devient: p>