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

jQuery/JavaScript提取字符串RM前缀支付金额为无逗号数值数组的方法

完全可以通过正则实现,这是最适配该场景的方案

实现逻辑

  • 首先通过正则规则精准定位所有RM货币前缀对应的金额片段,不受字符串原有排版、分隔符变动的影响
  • 对匹配到的金额字符串移除所有千位逗号,转换为标准浮点数存入结果数组

核心匹配规则

使用如下正则表达式:

const amountReg = /(?<!\w)RM\s*([\d,]+?\.\d{2})/g;

各部分规则说明:

  • (?<!\w) 负向后顾断言:确保RM前面不是字母、数字、下划线这类单词字符,避免误匹配TERM123.45这类本身包含RM子串的普通文本
  • RM 固定匹配马来西亚林吉特的货币前缀
  • \s* 匹配RM后面0个或多个空白字符,适配“RM9966.72”“RM 9966.72”这类格式变动的场景
  • ([\d,]+?\.\d{2}) 捕获组:非贪婪匹配数字、千位逗号的组合,直到识别到小数点加固定两位小数的金额结构
  • 全局修饰符g:确保遍历匹配字符串中所有符合规则的内容,而非仅返回第一个匹配项

小提示:(?<!\w) 属于ES2018引入的正则语法,目前所有主流浏览器、Node.js版本均已支持。如果需要兼容极老旧的运行环境,可以在匹配结果中额外判断RM前缀前的字符不是字母/数字/下划线即可,整体提取逻辑不受影响。

完整可运行代码

以你提供的付款条款字符串为例:

const paymentStr = `Payment terms:
50.00% - RM9,966.72 - (Before project start)
30.00% - RM5,580.03 - (Upon second review, 70% completion, before next 30% development start)
20.00% - RM3,386.69 - (Before deploy to PROD)`;

// 方式1:兼容所有现代JS环境的循环写法
const amountList = [];
const amountReg = /(?<!\w)RM\s*([\d,]+?\.\d{2})/g;
let match;
while ((match = amountReg.exec(paymentStr)) !== null) {
  // 移除所有千位逗号后转浮点数
  const cleanAmount = parseFloat(match[1].replace(/,/g, ''));
  amountList.push(cleanAmount);
}

// 方式2:ES2020+环境支持的简洁写法
// const amountList = [...paymentStr.matchAll(/(?<!\w)RM\s*([\d,]+?\.\d{2})/g)]
//   .map(item => parseFloat(item[1].replace(/,/g, '')));

最终输出的结果数组为:[9966.72, 5580.03, 3386.69],完全符合输出要求。

鲁棒性说明

  • 不依赖原字符串的固定分隔符(比如原文中的-、括号、换行等),哪怕后续字符串排版变动,只要RM前缀、两位小数的金额结构不变,就能正确提取
  • 自动清除金额中的所有千位逗号,最终输出无格式的纯十进制数值
  • 整个实现基于JavaScript原生能力,不需要引入jQuery,不存在额外依赖

内容的提问来源于stack exchange,提问作者Tan Si Kai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 20:18:03