gpt4 book ai didi

javascript - 如何在 JavaScript 正则表达式中用 (n-1) 次出现的相同字符替换 (n) 次出现的字符

转载 作者:行者123 更新时间:2023-12-04 12:30:24 26 4
gpt4 key购买 nike

我的数据是

Hello ***** World

我需要

Hello **** World

所以基本上 5 次出现的星号替换为 4 次出现的星号。我怎样才能在正则表达式 javascript 中做到这一点。

注意:星星的数量是动态的。

我试过了,但不确定如何替换捕获组:

console.log("Hello ***** World".replace(/[a-zA-Z](.*)/gm,"$1||$3"));

更新:

Wiktor 的解决方案非常有效。但不确定如何将其转化为我在正则表达式中面临的实际问题。所以我想,值得发布我的实际问题。

我的数据是这样的:

1.  Hello


• World

我需要这个

1.  Hello

• World

我需要将额外的行数减少到 n-1

[Numeric].[Space][Any text]

and

•[Three Spaces][AnyText]

反之亦然

•[Three Spaces][AnyText]

and

[Numeric].[Space][Any text]

注意:抱歉解释不当。我是正则表达式的菜鸟。

最佳答案

您可以捕获一个或多个星号,然后在不捕获另一个(序列中的最后一个)星号的情况下进行匹配,并替换为对组值的反向引用:

console.log("Hello ***** World".replace(/(\*+)\*/g, "$1"));

参见 regex demo .

这里还有其他类似的解决方案:

console.log("Hello ***** World".replace(/(\*)\*(?!\*)/g, '$1'));
console.log("Hello ***** World".replace(/(?<=\*)\*(?!\*)/g, ''));

参见 this regex demo #2regex demo #3 .

(\*)\*(?!\*) , 第一个 *被捕获到第 1 组中,然后匹配右侧没有其他星号的星号,并且 $1替换完成第一个解决方案中的工作。

(?<=\*)\*(?!\*)正则表达式只匹配任何左边有星号而右边没有星号的星号(这就是替换模式为空的原因)。

将此应用于减少两个字符串之间的换行符数量问题可能看起来像

text = text.replace(/(\d+\.\s.*(?:\r\n?|\n)+)(?:\r\n?|\n)(?=•\s{3})/g, '$1').replace(/(•\s{3}.*(?:\r\n?|\n)+)(?:\r\n?|\n)(?=\d+\.\s)/g, '$1')

参见 this demoanother, "vice versa", demo .

在这里,(?:\r\n?|\n)替换了 \*模式并匹配 CRLF、LF 或 CR 行结尾。 \s{3}匹配任意三个空白字符。 \d+\.\s匹配一个或多个数字,.和一个空格,以及 .*匹配除换行符之外的任何零个或多个字符,尽可能多(行模式的其余部分)。前瞻,(?=...) , 用于确保匹配连续的匹配项。

关于javascript - 如何在 JavaScript 正则表达式中用 (n-1) 次出现的相同字符替换 (n) 次出现的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69481090/

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