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

如何合并两个JavaScript正则表达式以解析文本生成目标对象?

单正则实现文本解析为指定对象

问题背景

需要将给定的结构化文本解析为目标对象,目前使用了两个独立正则,希望用单个正则完成解析。

待解析文本

PAYER:\r\n\r\n   MCNA \r\n\r\nPROVIDER:\r\n\r\n   MY KHAN \r\n   Provider ID: 115446397114\r\n   Tax ID: 27222193992\r\n\r\nINSURED:\r\n\r\n   VICTORY OKOYO\r\n   Member ID: 60451158048\r\n   Birth Date: 05/04/2008\r\n   Gender: Male\r\n\r\nCOVERAGE TYPE:\r\n\r\n   Dental Care

现有正则

re = new RegExp('(.*?):\r\n\r\n(.*?)(?:\r\n|$)', 'g');
re2 = new RegExp('(.*?):(.*?)(?:\r\n|$)', 'g');

预期解析结果

{
  payer: 'MCNA',
  provider: 'MY KHAN'
}

解决方案

可以使用一个兼顾主项匹配和内容提取的正则,同时处理主标题后的换行规则,并且自动忽略子项内容(比如Provider下的ID、Tax ID等)。

最终正则表达式

const regex = /(\w+):\r\n\r\n\s*(.*?)\s*(?=\r\n\r\n|\r\n\s*\w+:|$)/g;

正则规则说明

  • (\w+)::匹配主标题(如PAYER、PROVIDER),捕获为对象的键名
  • \r\n\r\n\s*:匹配标题后的两个换行符,以及内容前的任意空白字符
  • (.*?):非贪婪匹配主标题对应的核心内容(如MCNA、MY KHAN),捕获为对象的值
  • (?=\r\n\r\n|\r\n\s*\w+:|$):正向预查终止条件,匹配到下一个主标题开头、双换行或文本结尾时停止,避免误把子项内容包含进来

解析代码示例

const text = `PAYER:\r\n\r\n   MCNA \r\n\r\nPROVIDER:\r\n\r\n   MY KHAN \r\n   Provider ID: 115446397114\r\n   Tax ID: 27222193992\r\n\r\nINSURED:\r\n\r\n   VICTORY OKOYO\r\n   Member ID: 60451158048\r\n   Birth Date: 05/04/2008\r\n   Gender: Male\r\n\r\nCOVERAGE TYPE:\r\n\r\n   Dental Care`;
const regex = /(\w+):\r\n\r\n\s*(.*?)\s*(?=\r\n\r\n|\r\n\s*\w+:|$)/g;
const result = {};
let match;

while ((match = regex.exec(text)) !== null) {
  const key = match[1].toLowerCase();
  const value = match[2].trim();
  // 仅保留需要的payer和provider字段
  if (key === 'payer' || key === 'provider') {
    result[key] = value;
  }
}

console.log(result);
// 输出:{ payer: 'MCNA', provider: 'MY KHAN' }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:35:22