gpt4 book ai didi

javascript - 为什么 string.split() 结果包含 undefined?

转载 作者:数据小太阳 更新时间:2023-10-29 06:06:54 25 4
gpt4 key购买 nike

我想在 %\d+\n 上拆分字符串。我能够在这两个中的任何一个上成功拆分,但不能同时在两个上拆分:

> msg = 'foo %1 bar \n baz %2'

> msg.split(/(%\d+)/)
["foo ", "%1", " bar
baz ", "%2", ""]

> msg.split(/(\n)/)
["foo %1 bar ", "
", " baz %2"]

> msg.split(/(\n)|(%\d)/)
["foo ", undefined, "%1", " bar ", "
", undefined, " baz ", undefined, "%2", ""]

在最后一种情况下,为什么 undefined 在结果数组中,我应该做什么?

更新:我忘记说明我需要分隔符。我想要的结果是:

["foo ", "%1", " bar ", "\n", " baz ", "%2"]

最佳答案

引用MDN doc对于 String.prototype.split:

If separator is a regular expression that contains capturing parentheses, then each time separator is matched, the results (including any undefined results) of the capturing parentheses are spliced into the output array.

重点是任何捕获组都会被拼接——即使是未命中目标的组。您示例中的第一个 undefined\n 匹配的“无”(当 %\d 匹配时发生拆分),第二个是 for %\d(当 \n 匹配时)...你看到图片了。

要解决这个问题,您可以去掉捕获组(因为交替运算符的优先级最低):

msg.split(/\n|%\d/); // ["foo ", " bar ", " baz ", ""]

如果您确实也需要分离部分,请只使用一个捕获组:

msg.split(/(\n|%\d)/); 
// ["foo ", "%1", " bar ", "\n", " baz ", "%2", ""]

关于javascript - 为什么 string.split() 结果包含 undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com