使用正则表达式,从javascript中的字符串中提取值

问题描述 投票:0回答:2

需要使用正则表达式从字符串中提取值(出于性能原因)。案件可能如下:

  1. RED,100
  2. RED, “100”
  3. RED, “100”
  4. RED, “100 \” ABC \ “200”

生成的分隔[label,value]数组应为:

  1. [ '红', '100']
  2. [ '红', '100']
  3. [ '红', '100,']
  4. [ 'RED', '100 “ABC” 200']

我甚至研究了解决方案和流行的库,只需将整个字符串拆分以获取值,例如'RED,100'.split(/,/)可能就是这样做的。

但是我试图使用逗号创建一个正则表达式,只有当逗号不包含在引号类型值中时才会拆分。

这不是标准的CSV行为。但最终用户输入值非常容易。输入标签,价值。做任何内部价值,如果那被报价包围。如果您想包含引号,请使用反斜杠。

任何帮助表示赞赏。

javascript regex string
2个回答
1
投票

您可以使用此正则表达式来处理字符串中的转义引号:

/"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g

RegEx说明:

  • ":匹配文字开头报价
  • [^"\\]*:匹配任何不是\而不是引用的任何字符的0或更多
  • (?:\\.[^"\\]*)*:跟随逃脱的角色和另一个非引用,非\。匹配此组合中的0或更多以通过所有转义字符
  • ":匹配收盘报价
  • |:OR(交替)
  • [^,"]+:匹配非引号,非逗号字符串的1+

RegEx Demo

const regex = /"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g;

const arr = [`RED,100`, `RED,"100"`, `RED,"100,"`,
`RED,"100\\"ABC\\"200"`];
let m;

for (var i = 0; i < arr.length; i++) {
  var str = arr[i];
  var result = [];
  while ((m = regex.exec(str)) !== null) {
    result.push(m[0]);
  }
  console.log("Input:", str, ":: Result =>", result);
}

1
投票

您可以使用String#match并仅使用组。

var array = ['RED,100', 'RED,"100"', 'RED,"100,"', 'RED,"100\"ABC\"200"'];

console.log(array.map(s => s.match(/^([^,]+),(.*)$/).slice(1)))
© www.soinside.com 2019 - 2024. All rights reserved.