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

使用正则表达式,从javascript中的字符串中提取值,javascript,regex,string,Javascript,Regex,String,需要使用正则表达式从字符串中提取值(出于性能原因)。 情况可能如下: 红色,100 红色,“100” 红色,“100,” 红色,“100\”ABC\“200” 结果分离的[label,value]数组应为: [‘红色’,‘100’] [‘红色’,‘100’] [‘红色’、‘100’] ['RED','100“ABC”200'] 我研究了解决方案和一个流行的库,甚至只是拆分整个字符串以获得值, e、 g.“红色,100”。拆分(/,/)可能就行了 但我试图用逗号创建一个正则表达式,只有当逗号不包含

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

  • 红色,100
  • 红色,“100”
  • 红色,“100,”
  • 红色,“100\”ABC\“200”
  • 结果分离的[label,value]数组应为:

  • [‘红色’,‘100’]
  • [‘红色’,‘100’]
  • [‘红色’、‘100’]
  • ['RED','100“ABC”200']
  • 我研究了解决方案和一个流行的库,甚至只是拆分整个字符串以获得值, e、 g.“红色,100”。拆分(/,/)可能就行了

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

    这可能不是标准的CSV行为。但最终用户很容易输入值。 输入标签、值。做任何内部值,如果它被引号包围。如果要包含引号,请使用反斜杠


    非常感谢您的帮助。

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

    /"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g
    
    正则表达式解释:

    • :匹配文字开头引号
    • [^“\\]*
      :匹配0个或更多非
      \
      且非引号的字符
    • (?:\\...^“\]*)*
      :后跟转义字符和另一个非引号、非\。匹配此组合中的0个或多个以完成所有转义字符
    • :匹配结束报价
    • |
      :或(替代)
    • [^,”]+
      :匹配1+个非引号、非逗号字符串

    const regex=/“[^”\]*(?:\\.[^”\]*)*“[^,”]+/g;
    常量arr=[`RED,100`,`RED,100`,`RED,100`,
    `红色,“100\\”ABC\\“200”`;
    让m;
    对于(变量i=0;i”,Result);
    
    }
    您可以使用这个正则表达式来处理字符串中的转义引号:

    /"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g
    
    正则表达式解释:

    • :匹配文字开头引号
    • [^“\\]*
      :匹配0个或更多非
      \
      且非引号的字符
    • (?:\\...^“\]*)*
      :后跟转义字符和另一个非引号、非\。匹配此组合中的0个或多个以完成所有转义字符
    • :匹配结束报价
    • |
      :或(替代)
    • [^,”]+
      :匹配1+个非引号、非逗号字符串

    const regex=/“[^”\]*(?:\\.[^”\]*)*“[^,”]+/g;
    常量arr=[`RED,100`,`RED,100`,`RED,100`,
    `红色,“100\\”ABC\\“200”`;
    让m;
    对于(变量i=0;i”,Result);
    }
    您可以使用并仅获取组

    var数组=['RED,100','RED,100','RED,100','RED,100\'ABC\'200'];
    console.log(array.map(s=>s.match(/^([^,]+),(.*)$/).slice(1))
    您可以使用并仅获取组

    var数组=['RED,100','RED,100','RED,100','RED,100\'ABC\'200'];
    
    log(array.map(s=>s.match(/^([^,]+),(.*)$/).slice(1))
    Yes以案例3为例。如果我们用逗号分开,它会分成3块,对吗?我们不希望逗号出现在第一部分(红色)?是的,第一部分也一样,即标签。从用户的角度来看,它是简单的输入。格式是label,value,但如果您想在标签/值中输入逗号(,)或引号(“),我们不会对此进行拆分,是的,以案例3为例。如果我们按逗号拆分,它将分成3块,对吗?我们不希望逗号出现在第一部分(红色)?是的,第一部分也一样,即标签。从用户的角度来看,它是一个简单的输入。格式是标签,值,但如果您想在标签/值中输入逗号(,)或引号(“),我们将不会对此进行拆分,非常感谢。这真是难以置信。花了将近10分钟的时间。再次感谢。你刚刚启发了我关于regex的力量。非常感谢。这真是难以置信。花了将近10分钟的时间。再次感谢。你刚刚启发了我关于regex的力量。