[英]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
-- 两个捕获组,一个用于键,一个用于值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.