【问题标题】:select the key and the value without the equal using regex使用正则表达式选择不相等的键和值
【发布时间】:2020-06-27 13:06:25
【问题描述】:

有一个这样的字符串:

"let key1=value1; let key2=value2;"

我想使用正则表达式选择键和值作为组,我尝试使用环顾四周。

/(\w+)(?=\=)(\w+);/g

但它对我不起作用,有什么建议吗?

【问题讨论】:

  • 也许:let\s(\w+)=(\w+); 在哪里可以将组 1 作为键,将组 2 作为值?
  • 消费吧,/(\w+)\s*=\s*(\w+);/g。但是,您不应该使用正则表达式来解析 JS 代码。它有解析器。
  • @JvdV 不,它会选择相等的,也会选择空格
  • @WiktorStribiżew 它会选择我不想要的相等,我试图在虚拟机上运行之前编辑字符串代码。
  • 它不会选择它。它会匹配它。但是您将能够获取捕获的子字符串。

标签: javascript regex string


【解决方案1】:

以下正则表达式应该可以解决问题:(let (\w+) ?= ?(\w+);?)+。 每个let 语句都是一个匹配项,其中键是组 2,值是组 3。

【讨论】:

    【解决方案2】:

    (?=\=) 表达式部分是一个前瞻、零宽度断言,它不消耗文本但要求它出现在右侧。当您说(?=\=)(\w+) 时,您希望\w+ 模式在= 上开始匹配。由于\w= 不匹配,因此您的正则表达式总是失败。

    使用

    /(\w+)=(\w+);/g
    

    JavaScript(借用自How do you access the matched groups in a JavaScript regular expression?):

    var myString = "let key1=value1; let key2=value2;";
    var myRegexp = /(\w+)=(\w+);/g;
    match = myRegexp.exec(myString);
    while (match != null) {
      console.log(match[1] + "," + match[2]);
      match = myRegexp.exec(myString);
    }

    【讨论】:

      【解决方案3】:

      更具体地说,我们可以使用(\w+) ?= ?(\w+);?+

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 2011-06-18
        • 2019-11-30
        • 1970-01-01
        相关资源
        最近更新 更多