Согласно ECMA-262 §21.1.3.19 String.prototype.split ,
String.prototype.split ( separator, limit )
Возвращает Объект массива, в который были сохранены подстроки результата преобразования этого объекта в строку. Подстроки определяются путем поиска слева направо на предмет наличия разделителей; эти вхождения не являются частью какой-либо подстроки в возвращаемом массиве, но служат для разделения значения String .
Однако в настоящее время я наблюдаю странное поведение. Вот код:
let s = new String("All the world's a stage, And all the men and women merely players;");
console.log(s.split(/( |o)men /));
Ожидаемый результат:
[
"All the world's a stage, And all the",
'and w',
'merely players;'
]
Фактический результат:
[
"All the world's a stage, And all the",
' ',
'and w',
'o',
'merely players;'
]
Что здесь происходит? Как мне написать, чтобы соответствовать "мужчинам" или "предзнаменованиям"?
Окружение:
~ $ node --version
v13.8.0
Только для моей заметки:
Python3 ведет себя так же.
import re
s = "All the world's a stage, And all the men and women merely players;"
print(re.compile("( |o)men ").split(s))
#=> ["All the world's a stage, And all the", ' ', 'and w', 'o', 'merely players;']
print(re.compile("(?: |o)men ").split(s))
#=> ["All the world's a stage, And all the", 'and w', 'merely players;']
Возможно, есть разумная причина или реальные случаи использования для этого странного (по крайней мере, для меня) поведения ...