gpt4 book ai didi

javascript - 如何根据一个或多个重复字符的模式拆分字符串并保留匹配项?

转载 作者:行者123 更新时间:2023-11-30 11:13:03 28 4
gpt4 key购买 nike

比如得到一个字符串abaacaaa,一个字符a,拆分字符串得到['ab', 'aac', 'aaa']

string = 'abaacaaa'
string.split('a') // 1. ["", "b", "", "c", "", "", ""]
string.split(/(?=a)/) // 2. ["ab", "a", "ac", "a", "a", "a"]
string.split(/(?=a+)/) // 3. ["ab", "a", "ac", "a", "a", "a"]

string.split(/*???*/) // 4. ['ab', 'aac', 'aaa']

为什么 3rd 表达式输出与 2nd 相同的值,即使 + 出现在 a 之后,以及将什么放入 4th ?


编辑:

string.match(/a+[^a]*/g)babaacaaa 中无法正常工作。

string = 'babaacaaa'     // should be splited to ['b', 'ab', 'aac', 'aaa']
string.match(/a+[^a]*/g) // ["ab", "aac", "aaa"]

最佳答案

解决方案 2 和 3 相同,因为 unanchored 先行测试会测试输入中的每个位置。字符串。 (?=a) 测试 abaacaaa 中字符串的开头,并找到匹配项,丢弃前导的空结果。接下来,它在 a 之后尝试,没有匹配,因为右边的字符是 b,正则表达式引擎继续到下一个位置。接下来,它匹配 b 之后。 ab 被添加到结果中。然后它匹配 a 之后的位置,将 a 添加到结果数组中,然后转到下一个位置寻找匹配项。等等。使用 (?=a+) 过程是不确定的,它只匹配 1+ 个 a,但仍会测试每个位置。

要拆分babaacaaa,您需要

var s = 'babaacaaa';
console.log(
s.split(/(a+[^a]*)/).filter(Boolean)
);

a+[^a]* 匹配

  • a+ - 1 个或多个 a
  • [^a]* - 除了 a
  • 之外的 0 个或更多字符

捕获组允许将匹配的子字符串添加到生成的 split 数组中,并且 .filter(Boolean) 将丢弃相邻匹配之间的空匹配。

关于javascript - 如何根据一个或多个重复字符的模式拆分字符串并保留匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873288/

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