替换2组重复字符之间的所有时间段实例

时间:2016-11-11 20:57:21

标签: javascript json regex replace

我有一个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,'_')
}

2 个答案:

答案 0 :(得分:0)

你可以用正则表达式来做,但它可能比你需要做的更复杂。这可以通过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);
&#13;
<strong>Before:</strong><br />
<pre>
  <code>
  
  </code>
</pre>
<br /><br /><strong>After:</strong><br />
<pre>
  <code>
  
  </code>
</pre>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可以简单地使用。

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