You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换字符串中大于指定阈值的数字?

问题

我有一个始终包含2个数字的字符串,需要把其中大于5的数字替换为“> 5”。

示例:

const str = "SmartWear sklad 15&nbsp;ks<br />Externý sklad 12&nbsp;ks";
let limit = 5;

期望结果:

const replaced = "SmartWear sklad > 5&nbsp;ks<br />Externý sklad > 5&nbsp;ks";

我尝试了以下代码,但无法处理第二个数字也大于阈值的情况:

for (let stock of stocks) {
    let tooltip = stock.getAttribute("data-original-title") //"SmartWear sklad 15&nbsp;ks<br />Externý sklad 0&nbsp;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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:10:31