gpt4 book ai didi

Javascript .match 带反向量词的正则表达式(或从右到左解析)

转载 作者:搜寻专家 更新时间:2023-11-01 05:09:19 25 4
gpt4 key购买 nike

给定一个这样的字符串...

"ABCDEFG"

可以这么说,有一个“反向”工作的量词吗?

例如:

var foo = "ABCDEFG";
foo.match(/.{1,3}/g);

结果:

// Array(3) ["ABC", "DEF", "G"]

我正在努力实现的目标:

// Array(3) ["A", "BCD", "EFG"]

因此,无论字符串长度如何,数组始终是字符串的表示,每个节点的长度为 3 个字符(可能第 1 个字符除外),但始终从字符串的末尾开始。因此第一个数组项可能有 1、2 或 3 个字符长,这取决于“剩余”的内容。

我试过使用以下错误:

foo.match(/.{-1,3}/g); // null
foo.match(/.{1,-3}/g); // null

我想也许我可以使用类似于拆分字符串的否定,但是每个示例都返回 null。

我假设这可以在模式中以某种方式完成,而不是量词,所以我想了解如何用 .match() 编写它。或者这是否需要编写一个涉及其他字符串操作的自定义方法才能完成此操作?

最佳答案

正则表达式总是从左到右匹配,但您可以使用带有字符串结尾 anchor 的正向前瞻来实现您想要的:

var foo = "ABCDEFG";
foo.match(/.{1,3}(?=(.{3})*$)/g); // ["A", "BCD", "EFG"]

这里的子模式 (?=(.{3})*$) 是一个前瞻表达式,它匹配零次或多次重复(确切地说!)3 个字符,在字符串的末尾有界($).

关于Javascript .match 带反向量词的正则表达式(或从右到左解析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640868/

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