码迷,mamicode.com
首页 > Web开发 > 详细

正则表达式的格式化与高亮显示json字符串

时间:2015-08-21 01:53:49      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:

使用正则表达式的格式化与高亮显示json字符串

json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示

首先是对输入进行转换,如果是对象则转化为规范的json字符串,不是对象时,先将字符串转化为对象(防止不规范的字符串),然后再次转化为json串。其中json为输入。

  1. if (typeof json !== ‘string‘) {  
  2.   
  3.     json = JSON.stringify(json);  
  4.   
  5. else {  
  6.   
  7.     json = JSON.parse(json);  
  8.   
  9.     json = JSON.stringify(json);  
  10.   
  11. }  

等规范完数据之后对字符串进行标记,为了后面的切分、重新组合

这里有几个地方要添加标记,包括大括号、小括号的前后和逗号的后面都要添加标记,我这里使用的是换行\r\n(这样在命令行下测试时效果会比较好看)。

  1. // 在大括号前后添加换行  
  2.   
  3. reg = /([\{\}])/g;  
  4.   
  5. json = json.replace(reg, ‘\r\n$1\r\n‘);  
  6.   
  7. // 中括号前后添加换行  
  8.   
  9. reg = /([
    ])/g;  
  10.   
  11. json = json.replace(reg, ‘\r\n$1\r\n‘);  
  12.   
  13. // 逗号后面添加换行  
  14.   
  15. reg = /(\,)/g;  
  16.   
  17. json = json.replace(reg, ‘$1\r\n‘);  

添加完成标记之后就要做一些优化处理,去掉多余的换行、去掉逗号前面的换行,这样做是为了在切分是免得出现空串浪费一次循环处理,最后在冒号后面添加空格,看起来更漂亮。

  1. // 去除多余的换行  
  2.   
  3. reg = /(\r\n\r\n)/g;  
  4.   
  5. json = json.replace(reg, ‘\r\n‘);  
  6.   
  7. // 逗号前面的换行去掉  
  8.   
  9. reg = /\r\n\,/g;  
  10.   
  11. json = json.replace(reg, ‘,‘);  
  12.   
  13. //冒号前面缩进  
  14.   
  15. reg = /\:/g;  
  16.   
  17. json = json.replace(reg, ‘: ‘);  

接下来就是对这个初步处理过的串进行进一步处理了,我会在function(index, node) {}函数中添加逻辑,对每一个切分单元进行处理,包括缩进和美化格式。

  1. $.each(json.split(‘\r\n‘), function(index, node) {});  

首先说下缩进,缩进的方法很简单,遇到{、[符号时缩进增加1,遇到}、]符号时缩进减少1,否则缩进量不变。

  1. //这里遇到{、[时缩进等级加1,遇到}、]时缩进等级减1,没遇到时缩进等级不变  
  2.   
  3. if (node.match(/\{$/) || node.match(/\[$/)) {  
  4.   
  5.     indent = 1;  
  6.   
  7. else if (node.match(/\}/) || node.match(/\]/)) {  
  8.   
  9.     if (pad !== 0) {  
  10.   
  11.         pad -= 1;  
  12.   
  13.     }  
  14.   
  15. else {  
  16.   
  17.     indent = 0;  
  18.   
  19. }  

完成缩进后就该美化高亮显示代码了,这里要用到几个css规则,下面可以看到,对切分单元进行高亮显示的时候这里用正则进行判断,如果匹配到大括号标记为对象class、中括号标记为数组class、属性名称、属性值,一次对这些进行css规则添加,添加完成之后拼接起来就可以了。

  1. .ObjectBrace{color:#00AA00;font-weight:bold;}  
  2.   
  3. .ArrayBrace{color:#0033FF;font-weight:bold;}  
  4.   
  5. .PropertyName{color:#CC0000;font-weight:bold;}  
  6.   
  7. .String{color:#007777;}  
  8.   
  9. .Number{color:#AA00AA;}  
  10.   
  11. .Comma{color:#000000;font-weight:bold;}  

  1. //添加代码高亮  
  2.   
  3. node = node.replace(/([\{\}])/g,"<span class=‘ObjectBrace‘>$1</span>");  
  4.   
  5. node = node.replace(/([
    ])/g,"<span class=‘ArrayBrace‘>$1</span>");  
  6.   
  7. node = node.replace(/(\".*\")(\:)(.*)(\,)?/g,"<span class=‘PropertyName‘>$1</span>$2$3$4");  
  8.   
  9. node = node.replace(/\"([^"]*)\"(\,)?$/g,"<span class=‘String‘>\"$1\"</span><span class=‘Comma‘>$2</span>");  
  10.   
  11. node = node.replace(/(-?\d+)(\,)?$/g,"<span class=‘Number‘>$1</span><span class=‘Comma‘>$2</span>");  

最后我们看看完整的方法代码(这里我使用了jquery类库),以及测试地址:

要对jsonstr进行美化,这样就可以了APP.format(jsonstr),直接输出至<pre></pre>标签中就可以看到效果,

http://hi.680.com/8753180
http://hi.680.com/8753191
http://hi.680.com/8753198
http://hi.680.com/8753201
http://hi.680.com/8753204
http://hi.680.com/8753212
http://hi.680.com/8753221
http://hi.680.com/8753224
http://hi.680.com/8753227
http://hi.680.com/8753234
http://hi.680.com/8753240
http://hi.680.com/8753246
http://hi.680.com/8753249
http://hi.680.com/8753255
http://hi.680.com/8753261
http://hi.680.com/8753267
http://hi.680.com/8753276
http://hi.680.com/8753285
http://hi.680.com/8753291
http://hi.680.com/8753297
http://hi.680.com/8753303
http://hi.680.com/8753315
http://hi.680.com/8753321
http://hi.680.com/8753327
http://hi.680.com/8753333
http://hi.680.com/8753339
http://hi.680.com/8753346
http://hi.680.com/8753352
http://hi.680.com/8753358
http://hi.680.com/8753364
http://hi.680.com/8753370
http://hi.680.com/8753376
http://hi.680.com/8753385
http://hi.680.com/8753391
http://hi.680.com/8753394
http://hi.680.com/8753400
http://hi.680.com/8753406
http://hi.680.com/8753412
http://hi.680.com/8753418
http://hi.680.com/8753424
http://hi.680.com/8753430
http://hi.680.com/8753436
http://hi.680.com/8753442
http://hi.680.com/8753448
http://hi.680.com/8753454
http://hi.680.com/8753460
http://hi.680.com/8753466
http://hi.680.com/8753473
http://hi.680.com/8753479
http://hi.680.com/8753483
http://hi.680.com/8753489
http://hi.680.com/8753495
http://hi.680.com/8753501
http://hi.680.com/8753507
http://hi.680.com/8753513
http://hi.680.com/8753516
http://hi.680.com/8753522
http://hi.680.com/8753528
http://hi.680.com/8753534
http://hi.680.com/8753540
http://hi.680.com/8753546
http://hi.680.com/8753553
http://hi.680.com/8753559
http://hi.680.com/8753565
http://hi.680.com/8753572
http://hi.680.com/8753581
http://hi.680.com/8753587
http://hi.680.com/8753593
http://hi.680.com/8753599
http://hi.680.com/8753605
http://hi.680.com/8753611
http://hi.680.com/8753617
http://hi.680.com/8753623
http://hi.680.com/8753629
http://hi.680.com/8753635
http://hi.680.com/8753641
http://hi.680.com/8753647
http://hi.680.com/8753653
http://hi.680.com/8753659
http://hi.680.com/8753665
http://hi.680.com/8753671
http://hi.680.com/8753677
http://hi.680.com/8753683
http://hi.680.com/8753689
http://hi.680.com/8753699
http://hi.680.com/8753706
http://hi.680.com/8753712
http://hi.680.com/8753718
http://hi.680.com/8753724
http://hi.680.com/8753730
http://hi.680.com/8753739
http://hi.680.com/8753745
http://hi.680.com/8753751
http://hi.680.com/8753757
http://hi.680.com/8753763
http://hi.680.com/8753769
http://hi.680.com/8753775
http://hi.680.com/8753784
http://hi.680.com/8753790
http://hi.680.com/8753796
http://hi.680.com/8753799
http://hi.680.com/8753805
http://hi.680.com/8753811
http://hi.680.com/8753817
http://hi.680.com/8753823
http://hi.680.com/8753829
http://hi.680.com/8753835
http://hi.680.com/8753841
http://hi.680.com/8753848
http://hi.680.com/8753854
http://hi.680.com/8753863
http://hi.680.com/8753869
http://hi.680.com/8753875
http://hi.680.com/8753881
http://hi.680.com/8753887
http://hi.680.com/8753893
http://hi.680.com/8753899
http://hi.680.com/8753902
http://hi.680.com/8753908
http://hi.680.com/8753914
http://hi.680.com/8753921
http://hi.680.com/8753927
http://hi.680.com/8753933
http://hi.680.com/8753939
http://hi.680.com/8753945
http://hi.680.com/8753951
http://hi.680.com/8753957
http://hi.680.com/8753963
http://hi.680.com/8753969
http://hi.680.com/8753979
http://hi.680.com/8753985
http://hi.680.com/8753991
http://hi.680.com/8753997
http://hi.680.com/8754006
http://hi.680.com/8754025
http://hi.680.com/8754037
http://hi.680.com/8754043

版权声明:本文为博主原创文章,未经博主允许不得转载。

正则表达式的格式化与高亮显示json字符串

标签:

原文地址:http://blog.csdn.net/happyboycwh/article/details/47822449

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!