我正在尝试将字符串拆分为数组,其中任何数字都是单独拆分的:
function mysplit(s) { ??? }
// What I want to have happen is this:
//
// mysplit('ABC12DEF678IJ') --> ['ABC',12,'DEF',678,'IJ']
// mysplit('ABCD123') --> ['ABCD',123]
// mysplit('Eeyore') --> ['Eeyore']
我认为我能做到这一点的唯一方法是使用正则表达式替换的函数形式,使用可变状态作为数组,但这看起来很难看。 (请参阅下面的TBD,因为这是我默认尝试这样做的方式。)
有更简单的方法吗?
答案 0 :(得分:5)
使用 String.split()
本身,但保留分隔符。
'ABC12DEF678IJ'.split(/(\d+)/);
["ABC", "12", "DEF", "678", "IJ"]
'ABCD123'.split(/(\d+)/)
["ABCD", "123", ""] //tiny issue. ;)
'Eeyore'.split(/(\d+)/)
["Eeyore"]
如果分隔符包含捕获括号,则匹配的结果将在数组中返回。
答案 1 :(得分:3)
答案 2 :(得分:1)
这里的参考是我最初的方法,它看起来并不太糟糕:
function numsplit(s)
{
var a = [];
s.replace(/([0-9]+)|([^0-9]+)/g, function(g) {
a.push(isNaN(g) ? g : (+g));
});
return a;
}