简体   繁体   English

使用正则表达式 javascript 解析文本

[英]Parsing text using regex javascript

guys i am stuck while parsing following text into object.伙计们,我在将以下文本解析为对象时被卡住了。 I have created two separate regex but i want to make only one.我创建了两个单独的正则表达式,但我只想制作一个。 Below i am posting sample text as well as my following regex pattern.下面我发布示例文本以及我的以下正则表达式模式。

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 OKO\r\n   Member ID: 60451158048\r\n   Birth Date: 05/04/2009\r\n   Gender: Male\r\n\r\nCOVERAGE TYPE:\r\n\r\n   Dental Care

REGEX:正则表达式:

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

Expected result:预期结果:

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

This turns your input into an object that contains all key/value pairs:这会将您的输入变成一个包含所有键/值对的对象:

 const input = '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 OKO\r\n Member ID: 60451158048\r\n Birth Date: 05/04/2009\r\n Gender: Male\r\n\r\nCOVERAGE TYPE:\r\n\r\n Dental Care'; let result = Object.fromEntries(input.replace(/([^:]+):\s+([^\n\r]+)\s*/g, (m, c1, c2) => c1.toLowerCase() + '\r' + c2 + '\n').split('\n').filter(Boolean).map(item => item.trim().split('\r')) ); console.log(result);

Output:输出:

{
  "payer": "MCNA",
  "provider": "MY KHAN",
  "provider id": "115446397114",
  "tax id": "27222193992",
  "insured": "VICTORY OKO",
  "member id": "60451158048",
  "birth date": "05/04/2009",
  "gender": "Male",
  "coverage type": "Dental Care"
}

Explanation:解释:

  • Object.fromEntries() -- convert a 2D array to object, ex: [ ['a', 1], ['b', 2] ] => {a: 1, b: 2} Object.fromEntries() -- 将二维数组转换为对象,例如: [ ['a', 1], ['b', 2] ] => {a: 1, b: 2}
  • .replace() regex /([^:]+):\s+([^\n\r]+)\s*/g -- two capture groups, one for key, one for value .replace()正则表达式/([^:]+):\s+([^\n\r]+)\s*/g -- 两个捕获组,一个用于键,一个用于值
  • replace action c1.toLowerCase() + '\r' + c2 + '\n' -- convert key to lowercase, separate key/value pairs with newline replace action c1.toLowerCase() + '\r' + c2 + '\n' -- 将键转换为小写,用换行分隔键/值对
  • .split('\n') -- split by newline .split('\n') -- 按换行符分割
  • .filter(Boolean) : -- remove empty items .filter(Boolean) : -- 删除空项目
  • .map(item => item.trim().split('\r')) -- change array item to [key, value], eg change flat array to 2D array .map(item => item.trim().split('\r')) -- 将数组项更改为 [key, value],例如将平面数组更改为二维数组

You could add one more filter after the .map() to keep only keys of interest.您可以在.map()之后再添加一个过滤器以仅保留感兴趣的键。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM