我有这个字符串ActionComedySci-Fi
,我想将它分成像["Action", "Comedy", "Sci-Fi"]
这样的数组,但字符串也可以是ActionComedyThriller
,它没有连字符,这些字可能是以任何顺序。
所以我的问题是:我如何使用Node.JS按大写字母拆分字符串,并将它们包含在同一个数组列中,即使它们有连字符?
我尝试使用"ActionComedySci-Fi".split(' ')[0].match(/[A-Z]*[^A-Z]+/g);
,但只返回["Action", "Comedy", "Sci-", "Fi"];
答案 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)