- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试组合一个正则表达式来过滤掉一些数据,然后再将其传递到图表引擎中。我遇到了一个问题,我需要匹配部分模式重叠。
这是一个例子:
{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/
(背景:Why should I use int instead of a byte or short in C#) 为了满足我自己对使用“适当大小”整数与“优化”整数的优缺点的好奇心,我编写了以下代
以下布局在每个浏览器(Firefox、Chrome、Opera)中都能正常工作,Internet Explorer 8 除外: HTML:
我是一名优秀的程序员,十分优秀!