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

我有这个stringActionComedySci-Fi ,我想把它分成一个数组,如["Action", "Comedy", "Sci-Fi"]但是string也可以是ActionComedyThriller ,没有连字符,以任何顺序。

所以我的问题是:我怎样才能使用Node.JS拆分string的大写字母,并将它们包括在同一个数组列,即使他们有一个连字符?

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

相反, split你可以使用match使用这个lookahead正则expression式:

 /([AZ].*?[az])(?=[AZ]|$)/gm 

([AZ].*?[az])将从大写字母到小写字母匹配。

码:

 var re = /([AZ].*?[az])(?=[AZ]|$)/gm var s = 'ActionComedySci-Fi' var m = s.match(re) //=> ["Action", "Comedy", "Sci-Fi"] s = 'ActionComedyThriller' m = s.match(re) //=> ["Action", "Comedy", "Thriller"] 

既然你没有指定在这个单词之间是否有空格,你可以使用一个非单词边界进行分割,同时声明范围“A”到“Z”中的一个字符如下:

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

如果split方法在你身上,那么简单地匹配模式:

 var r = s.match(/[AZ][az]+(?:-[AZ][az]+)?/g)