gpt4 book ai didi

不带括号的 JavaScript 交替

转载 作者:行者123 更新时间:2023-11-29 10:38:58 26 4
gpt4 key购买 nike

我在 JavaScript 中有一个字符串,如下所示:

"This {{@is}} a $|test$| string with $|@string$| delimiters {{as}} follows"

我有一个正则表达式,用于提取 $|.*?$|{{.*?}} 之间的字符串,如下所示:

/{{(.*?)}}|\$\|(.*?)\$\|/g

示例:https://regex101.com/r/mV3uR1/1

我想组合交替,所以只有一个匹配组,例如:

/{{|\$\|(.*?)}}|\$\|/g

但这似乎忽略了我的量词 0 次或 1 次(?)并且它匹配整个字符串直到 ... {{as

示例:https://regex101.com/r/qZ7iI5/1

为什么会这样?

如果我如下增强该正则表达式以包含括号,它确实有效:

/({{|\$\|)(.*?)(}}|\$\|)/g

示例:https://regex101.com/r/fT5qH0/1

但是这会在我的匹配组中包含大括号/美元管道,这是我试图避免的(因为我只关心这些定界符之间的字符串,所以只需要一个匹配组)。

任何人都可以阐明这一点吗?

最佳答案

让我们比较一下:

工作正则表达式:

/({{|\$\|)(.*?)(}}|\$\|)/g

并且不工作正则表达式:

/{{|\$\|(.*?)}}|\$\|/g

在第二个正则表达式中,(.*?) 必须后跟 }} 并且整个 \$\|(.*? )}} 子模式如此有效意味着匹配:

{{\$\|(.*?)}}\$\|

而在第一个正则表达式中,由于分组交替在 (.*?) 之前和之后正确应用。

您也可以使用非捕获组:

/(?:{{|\$\|)(.*?)(?:}}|\$\|)/g

现在意味着:

{{\$\| 后跟 (.*?) 后跟 }}\$\|

关于不带括号的 JavaScript 交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372960/

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