繁体   English   中英

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

[英]Using regex, extract values from a string in javascript

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

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

结果分离的[label,value]数组应为:

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

我研究了解决方案,甚至找到了一个流行的库,它只是将整个字符串拆分成值,例如'RED,100'.split(/,/)可能就可以了。

但是我试图用逗号制作一个正则表达式,仅当该逗号未包含在引号类型值中时才拆分。

这不是标准的CSV行为。 但是对于最终用户而言,输入值非常容易。 输入标签,值。 做任何内在价值,如果多数民众赞成在引号包围。 如果要包含引号,请使用反斜杠。

任何帮助表示赞赏。

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

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

RegEx说明:

  • " :匹配文字开头的引号
  • [^"\\\\]* :匹配非\\且不带引号的任何字符的0个或多个
  • (?:\\\\.[^"\\\\]*)* :后跟转义字符和另一个非引号,非\\ 。匹配此组合中的0个或多个字符以获取所有转义字符
  • " :匹配结束语
  • | :OR(交替)
  • [^,"]+ :匹配非引号,非逗号字符串的1+

正则演示

 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); } 

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

 var array = ['RED,100', 'RED,"100"', 'RED,"100,"', 'RED,"100\\"ABC\\"200"']; console.log(array.map(s => s.match(/^([^,]+),(.*)$/).slice(1))) 

暂无
暂无

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

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