2015-11-14 2 views
1

У меня есть эта строка ActionComedySci-Fi, и я хочу разделить ее на массив, такой как ["Action", "Comedy", "Sci-Fi"], но строка также может быть ActionComedyThriller, у которой нет дефиса и этих слов может быть в любом порядке.Node.JS разделяет капитализированные строки, которые могут иметь дефис в массив

Так что мой вопрос: как я могу использовать Node.JS для разделения строк своими прописными буквами и включать их в один столбец массива, даже если у них есть дефис?

Я попытался с помощью "ActionComedySci-Fi".split(' ')[0].match(/[A-Z]*[^A-Z]+/g);, но это просто возвращает ["Action", "Comedy", "Sci-", "Fi"];

ответ

2

Скорее что split вы можете использовать match с помощью этого опережения регулярное выражение:

/([A-Z].*?[a-z])(?=[A-Z]|$)/gm 

([A-Z].*?[a-z]) будет совпадать с прописной буквы на строчную.

Код:

var re = /([A-Z].*?[a-z])(?=[A-Z]|$)/gm 

var s = 'ActionComedySci-Fi'  
var m = s.match(re) 
//=> ["Action", "Comedy", "Sci-Fi"] 

s = 'ActionComedyThriller'  
m = s.match(re) 
//=> ["Action", "Comedy", "Thriller"] 
1

Поскольку вы не указали, лежит ли пробел между словом, вы могли бы разделить, используя границу без слов, утверждая, что символ в диапазоне от «А» до «Z» следующим образом:

'ActionComedySci-Fi'.split(/\B(?=[A-Z])/); //=> [ 'Action', 'Comedy', 'Sci-Fi' ] 
'ActionComedyThriller'.split(/\B(?=[A-Z])/); //=> [ 'Action', 'Comedy', 'Thriller' ] 

Если метод split действует на вас, просто совпадают с шаблоном, вместо:

var r = s.match(/[A-Z][a-z]+(?:-[A-Z][a-z]+)?/g) 
+0

Это, похоже, не работает для меня. Я получил: '['', index: 6, input: 'ActionComedySci-Fi']' – mhsjlw

+0

Прекрасно работает на моем конце. https://eval.in/468761 – hwnd

+0

Хм ... Я не уверен. @ метод anubhava работает, поэтому я пойду с этим. Спасибо хоть! – mhsjlw

Смежные вопросы