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)