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

如何用JavaScript正则解析起止标识间的可变字符串-数字配对?

解决方案

方案1:基于你已去除换行的字符串(正则解析)

首先提取Amount到End之间的核心内容,再循环匹配每一组捐赠名称和金额:

// 你处理后的目标字符串
const body = "DonationAmountRed Cross1,630.83Humanity First500.00Global Health100.00End";

// 1. 捕获Amount与End之间的核心内容
const coreMatch = body.match(/Amount(.*?)End/);
if (!coreMatch) {
  console.log("未找到目标区段");
}
const coreContent = coreMatch[1];

// 2. 定义匹配单组捐赠-金额的正则(非贪婪匹配避免跨组)
const pairRegex = /([a-zA-Z\s]+?)(\d{1,3}(?:,\d{3})*\.\d{2})/g;

// 3. 循环匹配所有组,生成结果数组
const donationPairs = [];
let match;
while ((match = pairRegex.exec(coreContent)) !== null) {
  donationPairs.push({
    donation: match[1].trim(),
    amount: match[2]
  });
}

console.log(donationPairs);
// 输出:
// [
//   { donation: "Red Cross", amount: "1,630.83" },
//   { donation: "Humanity First", amount: "500.00" },
//   { donation: "Global Health", amount: "100.00" }
// ]

正则说明:

  • ([a-zA-Z\s]+?):非贪婪匹配字母与空格,确保只捕获到下一个金额前的捐赠名称
  • (\d{1,3}(?:,\d{3})*\.\d{2}):匹配带千分位逗号、保留两位小数的标准金额格式

方案2:保留换行符(更可靠的解法)

你之前去除换行符的操作反而增加了解析难度,原数据的换行是天然分隔符,直接基于行分割处理容错性更高(避免捐赠名称含数字等特殊情况导致正则失效):

// 原始未去除换行的字符串
const rawBody = `Donation
Amount
Red Cross
1,630.83
Humanity First
500.00
Global Health
100.00
End`;

// 1. 按换行分割,过滤空行与空白行
const lines = rawBody.split(/\r?\n/).map(line => line.trim()).filter(line => line);

// 2. 定位目标区段的起始与结束索引
const startIdx = lines.indexOf("Amount") + 1;
const endIdx = lines.indexOf("End");

// 3. 两两分组生成捐赠-金额配对
const donationPairs = [];
for (let i = startIdx; i < endIdx; i += 2) {
  if (i + 1 < endIdx) {
    donationPairs.push({
      donation: lines[i],
      amount: lines[i + 1]
    });
  }
}

console.log(donationPairs);
// 输出与方案1一致

优势:不依赖正则对文本格式的强假设,即使捐赠名称包含数字(如"Save Kids 2024")也能正确解析,稳定性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:33