regex 如何在TypeScript中从单个字符串中提取多个键和值?[已关闭]

uidvcgyl  于 2023-01-06  发布在  TypeScript
关注(0)|答案(4)|浏览(109)
    • 已关闭**。此问题需要超过focused。当前不接受答案。
    • 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

昨天关门了。
这篇文章是昨天编辑并提交审查的。
Improve this question
这是一个TypeScript问题。
我如何从一个字符串值中提取几个/多个键值对,并将键值对转换为一个对象?
我有一个字符串str,其中包含多个键和值。

const str = "Product ID:\\nPDAZ03015022\\n\\nAddress:\\nUnit 3A, Block A, Palm Spring Condominium\\n\\nProduct Price (in CP): 5000\\n\\nProcessing Fee (in CP): 22000\\n\\nTax Fee (if any): 5 CP",

现在我想从str中提取键值对到一个对象,如下所示。

const obj = 
{
  "Product ID": "PDAZ03015022",
  "Address": "Unit 3A, Block A, Palm Spring Condominium",
  "Product Price (in CP)": "5000",
  "Processing Fee (in CP)": "22000",
  "Tax Fee (if any)": "5 CP"
}

我如何在TypeScript中实现这一点,同时考虑到标准的es-lint?

vnjpjtjt

vnjpjtjt1#

换行符上的字符串.split会给予你接近你所寻找的内容。你需要在你想要返回的每个值之间使用一个通用的分隔符,它会明确地告诉你每个对象的开始/结束位置。
谷歌也是一个很好的选择这样的事情。

cidc1ykv

cidc1ykv2#

不确定下面的代码是否有帮助。

var bodyString = "Product ID:\\nPDAZ03015022\\n\\nAddress:\\nUnit 3A, Block A, Palm Spring Condominium\\n\\nProduct Price (in CP): 5000\\n\\nProcessing Fee (in CP): 22000\\n\\nTax Fee (if any): 5CP";

var bodyObject = bodyString.split("\\n\\n") // each line
        .map(s => s.split(":")) // split by :
        .reduce((m,s)=> { // reduce to object.
           m[s[0]]=s[1].replace("\\n","").trim(); 
          return m;
        },{});
 console.log(bodyObject);
72qzrwbm

72qzrwbm3#

这里有一个方法可以做到这一点:

const bodyString = "Product ID:\nPDAZ03015022\n\nAddress:\nUnit 3A, Block A, Palm Spring Condominium\n\nProduct Price (in CP): 5000\n\nProcessing Fee (in CP): 22000\n\nTax Fee (if any): 5CP";

const bodyObject = {};

const lines = bodyString.split("\n");
for (let i = 0; i < lines.length; i += 2) {
  const key = lines[i];
  const value = lines[i + 1];
  bodyObject[key] = value;
}

console.log(bodyObject);

这会将字符串拆分为一个行数组,然后成对地遍历这些行,将键值对添加到bodyObject对象。

kqlmhetl

kqlmhetl4#

实现此目的的一种方法是使用正则表达式从字符串中提取键值对
下面是一个示例,说明如何执行此操作:

const bodyString = "Product ID:\nPDAZ03015022\n\nAddress:\nUnit 3A, Block A, Palm Spring Condominium\n\nProduct Price (in CP): 5000\n\nProcessing Fee (in CP): 22000\n\nTax Fee (if any): 5CP";

const regex = /([^:\n]+):\s*([^\n]+)/g;
let match;
const bodyObject: { [key: string]: string } = {};
while (match = regex.exec(bodyString)) {
  bodyObject[match[1]] = match[2];
}
console.log(bodyObject);

相关问题