如何合并两个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
相关产品推荐
相关产品推荐

