正则表达式将数字和非数字分组,不在Javascript中工作

正则表达式将数字和非数字分组,不在Javascript中工作,javascript,regex,Javascript,Regex,我有一个简单的正则表达式模式,可以将数字和非数字分组。 所以像12AB34CD这样的字符串应该变成像[“12”,“AB”,“34”,“CD”] 当我使用这个()工具测试表达式时,它工作得很好,但在Javascript中似乎不起作用 var code = "12AB34CD"; var regex = new RegExp(/\d+|\D+/g); var codeArray = code.split(regex); console.log(codeArray); 这将生成一个数组,但所有空字

我有一个简单的正则表达式模式,可以将数字和非数字分组。 所以像12AB34CD这样的字符串应该变成像[“12”,“AB”,“34”,“CD”] 当我使用这个()工具测试表达式时,它工作得很好,但在Javascript中似乎不起作用

var code = "12AB34CD";
var regex =  new RegExp(/\d+|\D+/g);
var codeArray = code.split(regex);
console.log(codeArray);
这将生成一个数组,但所有空字符串[“”,“”,“”,“”,“”,“”]

我在这里遗漏了什么?

您可以使用
match

code.match(/\d+|\D+/g); //=> ["12", "AB", "34", "CD"]

JavaScript的正则表达式
split()
不包括分隔符(与正则表达式匹配的内容)-只包括分隔符之间的内容。这就是为什么会得到5个空字符串——因为正则表达式有4个匹配项,而这4个匹配项周围没有其他字符

"" "12" "" "AB" "" "34" "" "CD" ""

    ^       ^       ^       ^
    |       |       |       |
    +-------+-------+-------+--- regex (separator) matches

相反,因为您实际上想要与正则表达式匹配的东西,而不是介于两者之间的东西,所以您应该使用
.match()
而不是
.split()
,这将返回所有匹配项。

+1用于实际解释问题并提供替代方案。