gpt4 book ai didi

javascript - 全局正则表达式不匹配背靠背模式

转载 作者:行者123 更新时间:2023-11-28 03:53:06 24 4
gpt4 key购买 nike

我正在尝试组合一个正则表达式来过滤掉一些数据,然后再将其传递到图表引擎中。我遇到了一个问题,我需要匹配部分模式重叠。

这是一个例子:

示例数据

{name:'race1',data:[0,2,12,20,9]},{name:'race2',data:[9,23,32,19,8]}, {名称:'race3',数据:[1234,1000,1211,980]}

我需要删除所有低于 10 的值,并尝试了以下操作:

sampledata.replace(/([,\[])\d([,\]])/g,'$1NO$2')
//Returns {name:'race1',data:[NO,2,12,20,NO]},{name:'race2',data:[NO,23,32,19,NO]},{name:'race3',data:[1234,1000,1211,980]}

sampledata.replace(/(?:[,\[])\d(?:[,\]])/g,'$1NO$2')
//Returns {name:'race1',data:$1NO$22,12,20$1NO$2},{name:'race2',data:$1NO$223,32,19$1NO$2},{name:'race3',data:[1234,1000,1211,980]}

但都忽略第二个匹配项。我认为发生这种情况是因为第一个匹配将抓取 [0, ,而第二个匹配被跳过,因为我需要它抓取 ,2, ,但是第一个逗号在上一场比赛中已经使用过。我不知道如何告诉它重用模式的该部分。我尝试使用 ?: 忽略该组,但这似乎只是从替换字符串列表中忽略它。

这就是我需要的结果:

{name:'race1',data:[NO,NO,12,20,NO]},{name:'race2',data:[NO,23,32,19,NO]},{name:'race3',data:[1234,1000,1211,980]}

最佳答案

当您使用 .replace(/([,\[])\d([,\]])/g,'$1NO$2') 时,您匹配并消耗一个逗号或]([,\]]) 模式,并且该 char 不能在期间第二次与 ([,\[]) 匹配下一次迭代。

要替换所有未包含在其他数字中的数字,您可以使用

s = s.replace(/(^|\D)\d(?!\d)/g,'$1NO');

请参阅regex demo .

详细信息

  • (^|\D) - 匹配(使用)并捕获到第 1 组字符串开头 (^) 或任何非数字字符 (\D)
  • \d - 单个数字
  • (?!\d) - 后面不紧接着另一个数字。

如果您打算仅替换方括号内的此类数字(使用 /\[[^\][]+]/g 或 - 仅匹配 [...] 里面有逗号分隔的数字,/\[([\d,]+)]/g),先匹配[...],然后替换匹配项中的数字:

var s = "data23:[0,2,12,20,9]";
console.log(s.replace(/\[([\d,]+)]/g, function($0,$1) {
return "[" + $1.replace(/(^|\D)\d(?!\d)/g, "$1NO") + "]";
}));

关于javascript - 全局正则表达式不匹配背靠背模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47800288/

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