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

如何在JavaScript中用正则保留含-和.的数字并移除无关字符?

解决JavaScript正则保留数字、负号和小数点的问题

问题分析

你之前尝试的replace(/[^-\d\.]\D*$/g, "")逻辑有明显缺陷:这个正则只能匹配结尾处的单个非允许字符加后续非数字内容,既处理不了开头的无关字符(比如a-123里的a),也没法处理多个负号、多余小数点这类情况,更覆盖不了中间的无关字符。

正确实现方案

我们可以分四步处理,用链式正则替换完成需求:

function cleanTargetString(str) {
  return str
    // 1. 移除所有非数字、负号、小数点的字符
    .replace(/[^-\d.]/g, '')
    // 2. 把开头连续的负号替换成单个负号(比如--123 → -123)
    .replace(/^-+/, '-')
    // 3. 只保留第一个小数点,移除后续所有重复的小数点
    .replace(/\.(?=.*\.)/g, '')
    // 4. 移除结尾的负号或小数点(比如!-123- → 处理后结尾的-要去掉)
    .replace(/[-.]$/, '');
}

验证你的示例用例

  • cleanTargetString("--123") → -123
  • cleanTargetString("a-123") → -123
  • cleanTargetString("!-123-") → -123
  • cleanTargetString("+-123.44x") → -123.44
  • cleanTargetString("--123.33-") → -123.33

各步骤说明

  1. 第一步:/[^-\d.]/g匹配所有不是数字、负号、小数点的字符,直接移除,先过滤掉大部分无关内容。
  2. 第二步:/^-+/匹配开头连续的负号,替换成单个负号,避免多个负号残留。
  3. 第三步:/\.(?=.*\.)/g匹配后面还存在小数点的所有小数点,替换为空,保证最终只有一个小数点。
  4. 第四步:/[-.]$/匹配结尾的负号或小数点,直接移除,避免这类无效符号留在最后。

内容的提问来源于stack exchange,提问作者3gwebtrain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:47:06