我正在尝试将一个正则表达式放在一起,以便在将某些数据传递到图表引擎之前将其过滤掉。我遇到了一个问题,我需要匹配的模式部分重叠。
以下是一个例子:
{name:'race1',data:[0,2,12,20,9]},{name:'race2',data:[9,23,32,19,8]},{name:'race3',data:[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]}
答案 0 :(得分:0)
当您使用.replace(/([,\[])\d([,\]])/g,'$1NO$2')
时,您匹配并使用带有]
模式的逗号或([,\]])
,并且在下一次使用([,\[])
时,该第二次无法匹配该字符迭代。
要替换未包含在其他数字中的所有数字,您可以使用
s = s.replace(/(^|\D)\d(?!\d)/g,'$1NO');
请参阅regex demo。
<强>详情
(^|\D)
- 匹配(消耗)并捕获到第1组字符串开头(^
)或任何非数字字符(\D
)\d
- 一位数字(?!\d)
- 没有立即跟随另一个数字。如果您打算仅在方括号内替换此类数字(使用/\[[^\][]+]/g
或 - 仅将[...]
与逗号分隔的数字/\[([\d,]+)]/g
)匹配,则首先匹配{{1然后替换匹配中的数字:
[...]
&#13;