NodeJS RegExp отличается от регулярного экспресса нахождения цифры - PullRequest
0 голосов
/ 01 февраля 2019

Я не знаю, почему существуют различия между re и /^Text(\d+)?[.]json$/g.

Я использовал неправильное выражение?

$ 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 ]

0 голосов
/ 01 февраля 2019

/g флаг заставляет тот же RegExp запоминать конечную позицию последнего успешного совпадения и искать в этой позиции даже в другой строке в следующий раз.Если вы используете литерал RegExp, регулярное выражение создается заново каждый раз, и это поведение не оказывает влияния.

См. Примечание и примеры в этом разделе для MDN.

0 голосов
/ 01 февраля 2019

Удалите косые черты в виде регулярного выражения при использовании конструктора:

re = new RegExp(/^Text(\d+)?[.]json$/g) становится:

 re = new RegExp('^Text(\d+)?[.]json$', 'g')
0 голосов
/ 01 февраля 2019

Такое странное поведение.

Просто удалите глобальный флаг, и все готово.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...