【问题标题】:Replace all instances of a period between 2 sets of repeating characters替换两组重复字符之间的所有句点实例
【发布时间】:2016-11-11 20:57:21
【问题描述】:

我有一个供应商发送的 JSON 代码块。在我可以使用它之前,我必须操作所有键(大约 65 个)以删除句点,否则它会干扰我的应用程序使用。尝试使用带有 JS 替换功能的正则表达式模式来用下划线替换它们。假设我有以下字符串:

JSON_String = '{ "Test.String.One" : "Answer.One" ,  "Test.String.Two" : "Answer.Two" , "Test.String.Three" : "Answer.Three"}';

我需要一个正则表达式模式,它将替换键中的所有句点,但不替换值中的所有句点。所以这将是 { 和 : 之间或 , 和 : 之间的所有句点

完成后的结果应该是这样的:

JSON_String = '{ "Test_String_One" : "Answer.One" ,  "Test_String_Two" : "Answer.Two" , "Test_String_Three" : "Answer.Three"}';

该应用程序正在使用 Javascript 的 Rhino 实现,因此 \K 之类的某些内容似乎不起作用(除非我在测试中做错了什么)。

谁能提供正确的搜索模式来完成此任务?

如果不能在一次调用中完成,我不反对使用循环。

类似下面的就可以了。我只是需要一些工作。

while (JSON_String.search(/regex/g) != -1)
{
  JSON_String = JSON_String.replace(/regex/g,'_')
}

【问题讨论】:

  • 我可以做到,但不使用正则表达式。你想要吗??

标签: javascript json regex replace


【解决方案1】:

你可以简单地使用。

    function underscore(){
     var a = dotted = JSON.parse(JSON_string), underscored = {};
     for(var i in dotted){
          underscored[i.repace(/\./, "_")] = dotted[i];
       }
     return JSON.stringify(underscored)
  }

【讨论】:

    【解决方案2】:

    你可以用正则表达式来做,但它可能比你需要做的更复杂。这可以通过Object.keys().replace() 轻松完成:

    var JSON_String = { "Test.String.One" : "Answer.One" ,  "Test.String.Two" : "Answer.Two" , "Test.String.Three" : "Answer.Three"};
    
    document.querySelectorAll('code')[0].innerHTML = JSON.stringify(JSON_String);
    
    function UnderscoreKeys(obj) {
        var keys = Object.keys(obj),
            temp = {};
          
        for(var a = 0, len = keys.length; a < len; a++) {
      	    temp[keys[a].replace(/\./g, "_")] = obj[keys[a]];
        }
      
        return temp;
    }
    
    JSON_String = UnderscoreKeys(JSON_String);
    
    document.querySelectorAll('code')[1].innerHTML = JSON.stringify(JSON_String);
    <strong>Before:</strong><br />
    <pre>
      <code>
      
      </code>
    </pre>
    <br /><br /><strong>After:</strong><br />
    <pre>
      <code>
      
      </code>
    </pre>

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2012-11-14
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多