如何替换字符串中大于指定阈值的数字?
问题
我有一个始终包含2个数字的字符串,需要把其中大于5的数字替换为“> 5”。
示例:
const str = "SmartWear sklad 15 ks<br />Externý sklad 12 ks"; let limit = 5;
期望结果:
const replaced = "SmartWear sklad > 5 ks<br />Externý sklad > 5 ks";
我尝试了以下代码,但无法处理第二个数字也大于阈值的情况:
for (let stock of stocks) { let tooltip = stock.getAttribute("data-original-title") //"SmartWear sklad 15 ks<br />Externý sklad 0 ks"; let limit = 5; const index = tooltip.search(/[0-9]/); const firstNum = tooltip[index]; if (firstNum > limit) { const replaced = tooltip.replace(firstNum, `> ${limit}`) stock.setAttribute("data-original-title", replaced) } }
解决方案
你的代码存在两个关键问题:
- 只提取了第一个数字的单个字符(比如15只取了第一个"1"),无法处理多位数
- 单次
replace默认只替换第一个匹配项,没法覆盖第二个数字
正确的做法是用正则全局匹配所有数字序列,再通过替换函数判断每个数字的大小:
for (let stock of stocks) { let tooltip = stock.getAttribute("data-original-title"); const limit = 5; // 全局匹配所有连续数字,逐个判断替换 const replaced = tooltip.replace(/\d+/g, (num) => { return Number(num) > limit ? `> ${limit}` : num; }); stock.setAttribute("data-original-title", replaced); }
代码说明
/\d+/g:正则表达式,\d+匹配一个或多个连续数字,g标记表示全局搜索,能找出字符串里所有数字序列- 替换函数
(num) => {...}:每个匹配到的数字会传入函数,先转成数值判断是否大于阈值,符合条件就替换为> 5,否则保留原数字 - 不管是单个数字还是多位数,也不管字符串里有多少个数字,都能一次性处理完成
内容的提问来源于stack exchange,提问作者Sqerry
相关产品推荐
相关产品推荐

