Странно разные результаты после разделения строки с очень похожими регулярными выражениями - PullRequest
0 голосов
/ 11 июня 2019

Я поигрался с некоторым кодом и столкнулся со странным поведением. Можете ли вы объяснить мне, почему эти выражения дают разные результаты?

const a = 'abcd';

const b = a.split(/\b|\B/);
console.log('b: ', b);

const c = a.split(/(\b|\B)/);
console.log('c: ', c);

const d = a.split(/(\b|\B){0}/);
console.log('d: ', d);

const e = a.split(/(\b|\B)(?=(\b|\B){0})/);
console.log('e: ', e);

const f = a.split(/(\b|\B){0}(?=(\b|\B){0})/);
console.log('f: ', f);

Вывод:

b:  [ 'a', 'b', 'c', 'd' ] 
 
c:  [ 'a', '', 'b', '', 'c', '', 'd' ] 
 
d:  [ 'a', undefined, 'b', undefined, 'c', undefined, 'd' ] 
 
e:  [ 'a', '', undefined, 'b', '', undefined, 'c', '', undefined, 'd' ]

f:  [ 'a', 
  undefined, 
  undefined, 
  'b', 
  undefined, 
  undefined, 
  'c', 
  undefined, 
  undefined, 
  'd' ]

1 Ответ

1 голос
/ 11 июня 2019

С ECMA :

String.prototype.split (separator, limit)

Если разделитель является регулярным выражением, содержащим круглые скобки, то каждыйС разделителем времени сопоставляются результаты (включая любые неопределенные результаты) скобок захвата, которые вставляются в выходной массив.

Результаты из групп захвата объединяются в результирующий массив в каждом из ваших примеров.с, д, е и е

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...