【问题标题】:How to replace pattern with regex using a general approach?如何使用一般方法用正则表达式替换模式?
【发布时间】:2016-06-24 17:11:59
【问题描述】:

我正在尝试用正则表达式替换以下模式:

"id": 1,"name": "A green door","price": 12.50,"tags": "green"
"id": 1,"name": "A green door","price": 12.50,"tags": "green"
"id": 1,"name": "A green door","price": 12.50,"tags": "green"
"id": 1,"name": "A green door","price": 12.50,"tags": "green"

我希望它输出以下内容:

1,"A green door",12.50,"green"
1,"A green door",12.50,"green"
1,"A green door",12.50,"green"
1,"A green door",12.50,"green"

但是我希望表达式是通用的,因为值可能并不总是相同,唯一永远不会改变的是模式。但是我一直在尝试不同的表达方式,例如:"(.*?)":

但是不断得到错误的结果。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 您能发布一些您尝试过的东西,以便我们更好地指导您吗?我宁愿不要在没有看到你已经尝试过的情况下就给你答案。 (如果这是家庭作业)
  • 是的,我尝试过以下表达式:'[^:]*, ' '("(.+?)":)|("(.+?)\") ' 和其他几个人发现该模式必须恰好有两个引号 + 以 : 和空格结尾,但我在正则表达式方面相当新,我无法在表达式中输入此模式。 @鸭子
  • 与其自己发布另一个答案,不如查看给出的其他 2 个答案 - 他们看起来已经实现了您想要的。另外,下次查看Regex 101 以获得非常有用的可视化调试器。祝你好运!

标签: regex regex-lookarounds


【解决方案1】:

这是一个非常简单的解决方案:

s/"[^"]*"\s*:\s*//g

如果您还想在字符串中允许反斜杠转义,我们可以再花哨一点:

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

【讨论】:

    【解决方案2】:

    您可以使用 String#splitArray#mapArray#join 方法来完成。

    var str = `"id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"`;
    
    var res = str.split('\n').map(function(v) {
      return v.split(',').map(function(v1) {
        return v1.split(':')[1].trim();
      }).join();
    });
    
    console.log(res);

    或者使用String#replace方法

    var str = `"id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"
    "id": 1,"name": "A green door","price": 12.50,"tags": "green"`;
    
    var res = str.replace(/"\w+":\s*(?=.*?(?:[,|\n]|$))/g, '')
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2018-08-03
      • 2012-07-04
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 2014-03-29
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多