gpt4 book ai didi

javascript - 如果指定了多个分隔符,javascript 的 split 函数如何通过分隔符工作

转载 作者:行者123 更新时间:2023-11-28 17:12:08 26 4
gpt4 key购买 nike

我使用 Javascript 的 split 函数和多个分隔符来分割字符串。虽然我让它工作了,但它的行为让我感到困惑。寻找对此行为的解释

我在下面有这个字符串 -

let z = 'c4 <= v4';

我用 console.log(z.split(/(<|=|<=)/)) 分割它。该字符串可能包含 < , = ,或<= ,这就是为什么我用 3 个分隔符分割它。这给我[ 'c4 ', '<', '', '=', ' v4' ] ,这不是我所期待的。我在期待[ 'c4 ', '<=', ' v4' ] .

然后我认为 split 会沿着分隔符列表向下移动,因此它首先按 < 进行分割,然后将结果除以 = ,这可以解释 < 和 = 之间的空元素。然后当到达分隔符 <= 时,在结果中找不到任何内容。

为了证明我的想法,我尝试了 console.log(z.split(/(=|<=)/)) 。按照我的逻辑,我期望结果是 [ 'c4 <', '=', ' v4' ] ,因为我期望 split 使用 =首先作为分隔符。然而实际结果是[ 'c4 ', '<=', ' v4' ] 。几乎就像 split 只是跳过了分隔符 = .

如果我安排分隔符的顺序,我可以让它正常工作 console.log(z.split(/(<=|<|=)/)) ,将得到 [ 'c4 ', '<=', ' v4' ]这强化了我的想法,因为 <=是指定的第一个分隔符。

我搜索了一大堆,但找不到对此行为的解释。如何通过分隔符进行分割?

提前非常感谢

最佳答案

在大多数正则表达式引擎中,当您​​有多个可以匹配同一字符串的替代项时,它会使用第一个匹配的替代项。因此,是否写 <|<= 会有所不同。或<=|< .

如果输入字符串是foo<=bar ,第一个版本将仅匹配 <因为它是第一个匹配的选择,而第二个将匹配 <= .

这在Regular-Expression.info中有更详细的解释。 .

因此,一般的解决方案是按照长度降序编写正则表达式,并使用替代项,例如z.split(/(<=|<|=)/)

有一些正则表达式引擎总是尝试查找最长的匹配项,而不是第一个匹配项(上面的页面将它们称为“文本定向”)。但 JavaScript 不会这样做。

关于javascript - 如果指定了多个分隔符,javascript 的 split 函数如何通过分隔符工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155712/

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