Node.JS将可能有连字符的大写字符串拆分为数组

时间:2015-11-14 19:01:39

标签: arrays regex node.js split

我有这个字符串ActionComedySci-Fi,我想将它分成像["Action", "Comedy", "Sci-Fi"]这样的数组,但字符串也可以是ActionComedyThriller,它没有连字符,这些字可能是以任何顺序。

所以我的问题是:我如何使用Node.JS按大写字母拆分字符串,并将它们包含在同一个数组列中,即使它们有连字符?

我尝试使用"ActionComedySci-Fi".split(' ')[0].match(/[A-Z]*[^A-Z]+/g);,但只返回["Action", "Comedy", "Sci-", "Fi"];

2 个答案:

答案 0 :(得分: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 :(得分:1)

由于您没有指定空格是否位于单词之间,因此您可以使用非单词边界进行拆分,同时断言“A”到“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)