代码之家  ›  专栏  ›  技术社区  ›  Sai Ram Gupta

仅当后跟某个字符串时才按分隔符拆分

  •  0
  • Sai Ram Gupta  · 技术社区  · 8 年前

    我有一根绳子 "values.component_category:monstor_client,dimensions.pool:rpool1,dimensions.env:prod,values.error_description:No content to map due to end-of-input↵ at [Source: java.io.StringReader@2ef452e5; line: 1, column: 1],values.incident_category:health"

    并试图通过 , 只有在它后面跟着字符串时 values dimensions . 因为还有一个 , 在里面 ; line: 1, column: 1 我想逃避这个。

    我试过regex .split(/,?(values|dimensions)./)

    预期产量:

    [
       "values.component_category:monstor_client",
       "dimensions.pool:rpool1", 
       "dimensions.env:pord", 
       "values.error_description:No content to map due to end-of java.io.StringReader@2ef452e5; line: 1, column: 1]", 
       "values.incident_category:health"
    ]
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Rafał Wrzeszcz    8 年前

    https://www.regular-expressions.info/lookaround.html

    尤其需要使用“向前看”,例如: ,(?=values|dimensions)

        2
  •  0
  •   amrender singh    8 年前

    你可以使用 Array.reduce String.split() 要做到这一点:

    var str =  "values.component_category:monstor_client,dimensions.pool:rpool1,dimensions.env:prod,values.error_description:No content to map due to end-of-input↵ at [Source: java.io.StringReader@2ef452e5; line: 1, column: 1],values.incident_category:health";
    
    var arr = str.split(/,(?=values|dimensions)/);
    
    var result = arr.reduce((a,val)=>{
      var key = val.substring(0, val.indexOf(":"));
      var value = val.substring(val.indexOf(":")+1)
      a[key] = value;
      return a;
    },{});
    
    console.log(result);