gpt4 book ai didi

javascript - 为什么使用包含捕获组的正则表达式的 string.split 返回以空字符串结尾的数组?

转载 作者:行者123 更新时间:2023-12-03 02:48:30 25 4
gpt4 key购买 nike

我想在第一个冒号上分割输入字符串,该冒号后面仍然有字符在同一行。

为此,我使用正则表达式 /:(.+)/

给定字符串

aaa:
bbb:ccc

我期望的输出

["aaa:\nbbb", "ccc"]

并给出字符串

aaa:bbb:ccc

我期望的输出

["aaa", "bbb:ccc"]

然而,当我实际运行这些命令时,我得到了

["aaa:\nbbb", "ccc", ""]
["aaa", "bbb:ccc", ""]

作为输出。

不知何故,javascript 在数组末尾添加了一个空字符串。

我已经检查了documentation for String.split虽然它确实提到,如果您对具有指定分隔符的空字符串执行 string.split ,您将获得一个包含 1 个空字符串的数组(而不是空数组)。它没有提到输出中始终存在空字符串,也没有提到如果犯了常见错误或其他错误,可能会得到此结果的警告。

我会理解我的输入字符串末尾是否有冒号或类似的东西;然后它在冒号处分开,匹配的其余部分是空字符串。这就是 Splitting string with regular expression to make it array without empty element 中提到的问题- 但我没有这个问题,因为我的输入字符串不以分隔符结尾。

我知道在我的情况下,一个快速解决方案是通过 "aaa:bbb:ccc".split(/:(.+)/, 2) 简单地限制匹配数量 ,但我仍然很好奇:

为什么此 string.split 调用返回一个以空字符串结尾的数组?

最佳答案

如果我们将正则表达式更改为 /:.+/ 并对其执行拆分,您将得到:

["aaa", ""]

这是有道理的,因为正则表达式与 :bbb:ccc 匹配。如果您要手动拆分该字符串,则会给出相同的输出。

>>> 'aaa:bbb:ccc'.split(':bbb:ccc')
['aaa', '']

添加捕获组只会保存 bbb:ccc,但不应更改原始拆分行为。

关于javascript - 为什么使用包含捕获组的正则表达式的 string.split 返回以空字符串结尾的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38261359/

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