Rob*_*ade 4 javascript regex string reverse
给出像这样的字符串......
"ABCDEFG"
Run Code Online (Sandbox Code Playgroud)
有没有可能有一个量词在"反向"工作,所以说?
例如:
var foo = "ABCDEFG";
foo.match(/.{1,3}/g);
Run Code Online (Sandbox Code Playgroud)
结果是:
// Array(3) ["ABC", "DEF", "G"]
Run Code Online (Sandbox Code Playgroud)
我正在努力实现的目标:
// Array(3) ["A", "BCD", "EFG"]
Run Code Online (Sandbox Code Playgroud)
因此,无论字符串长度如何,数组始终是字符串的表示形式,每个节点的长度为3个字符(可能除了第1个),但始终从字符串的末尾开始.所以第一个数组项可能是1,2或3个字符长,这取决于"剩下的".
我尝试使用以下错误:
foo.match(/.{-1,3}/g); // null
foo.match(/.{1,-3}/g); // null
Run Code Online (Sandbox Code Playgroud)
想想也许我可以使用类似于拆分字符串的否定,但是每个示例都返回null.
我假设这可以在模式中以某种方式完成,而不是量词,所以我想了解如何编写.match().或者这需要编写一个自定义方法,其中涉及其他字符串操作,以实现这一目标?
正则表达式总是从左到右匹配,但是您可以使用带有字符串结尾锚点的正向前瞻来实现您想要的:
var foo = "ABCDEFG";
foo.match(/.{1,3}(?=(.{3})*$)/g); // ["A", "BCD", "EFG"]
Run Code Online (Sandbox Code Playgroud)
这里的子模式(?=(.{3})*$)是一个超前表达式,它匹配零(或完全!)3个字符的零个或多个重复,以字符串($)的末尾为界.