gpt4 book ai didi

javascript - 正则表达式通过使用输入字符串来跳过一些匹配

转载 作者:行者123 更新时间:2023-12-02 06:51:46 32 4
gpt4 key购买 nike

我知道为什么会出现这个问题,但我需要一种方法来解决它。假设我有一个这样的字符串:

var str = "123+53ff+124+ks23+223+22+mo";

我想用 number 替换两个 + 符号之间的数字来得到这个:

str = "123+53ff+number+ks23+number+number+mo";

所以我使用这个正则表达式:/\+\d+\+/g 像这样:

str = str.replace(/\+\d+\+/g, "+number+");

但它所做的是,如果彼此之后有更多匹配项 (+3+4+5+...),它匹配一个,跳过下一个,匹配后一个,跳过之后...

我有点知道为什么会这样:因为当它匹配一个时,它会消耗正确的 + 然后在那个 + 之后开始匹配下一个元素不会匹配,因为从技术上讲它没有被 + 符号包围。

如果输入是 +3++4++5+ 那么结果就是预期的,因为每个数字都被它自己的 + 符号包围(消耗一个是这是个问题,因为如果一个 + 被消耗了,下一个就可以了。

我已经通过两次调用 replace 来解决这个问题。但这是非常骇人听闻的。我想要一个可靠的方法。那么,如何使正则表达式在这里起作用呢?或者如何让两个连续的数字共享相同的 + 符号?

注意:我不想解决这个特定示例的问题(替换 + 符号之间的数字)。这只是问题的一个例子。

编辑:

如果有办法做到这一点,那么我可以将 + 符号分组吗?我的意思是我可以这样做 /(\+).../ 以便我可以使用 $1 访问它吗?

最佳答案

由于重叠匹配不匹配,您可以使用正向先行以确定数字后是否有 + 字符。

在这样做时,您实际上并没有匹配后续的 +,因为它是前瞻的一部分:

Example Here

/\+\d+(?=\+)/g

例如:

"123+53ff+124+ks23+223+22+mo".replace(/\+\d+(?=\+)/g, "+number");

输出:

"123+53ff+number+ks23+number+number+mo"

值得指出的是,您可以使用 +number(而不是 +number+)来替换匹配项,因为后续的 + 是不再匹配。

注意:如果要对 + 符号进行分组,请像这样对第一个符号进行分组:/(\+)\d+(?=\+ )/g 作为第一个就足够了。第二个将在下一场比赛中自动分组。

关于javascript - 正则表达式通过使用输入字符串来跳过一些匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928286/

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