Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

利用正则表达式在JSON中搜索需要的项

  之前有一篇文章就是说使用JS内部方法来优化效率的,但是没有给出什么例子。这回,我们把例子补上。用正则表达式去搜索JSON里面的字符串。 //创建一个JSON
json='{"id":1,"name":"次碳酸钴","country":"china"}'+
     '{"id":2,"name":"SB1号","country":"china"}'+
     '{"id":3,"name":"SB2号","country":"japan"}'+
     '{"id":4,"name":"SB3号ca","country":"Korea"}'+
     '{"id":5,"name":"SB4号","country":"america"}'+
     '{"id":6,"name":"SB5号","country":"canada"}';

//定义要搜索的字符
var search="ca";

//声明变量
//c是正则中匹配字符串内字符的,因为会用到许多次而提取出来
//s是用来保存搜索到的结果的
var c='(?:\\\\"|[^"])',s=[];

json.replace(//开始正则匹配
  RegExp(//创建一个正则表达式,这里就不一句句介绍了
    '"id":(\\d+)(?:,"\\w+":("?)'+c+
    '+?\\2(?=,|}))*(?:,"(\\w+)":("?)'+c+
    '*'+search+c+'*?\\4(?=,|}))',
    "g"
  ),function($0,id,$2,field){
    s[id]=field;//匹配成功则保存到s中
  }
);

//输出匹配到的结果
var op="",i;
for(i in s)op+=i+"\t"+s[i]+"\n";
alert(op);

  这样,我们就可以获取到匹配到的项了,如果需要其它数据,可以更改正则表达式来获取。程序中定义的变量c,是一个非获取匹配,匹配非双引号和转义的双引号,这样我们就可以用它来匹配包含在双引号中的字符串了。正则表达式一开始用"id",来匹配,这是我们的JSON格式中第一个项目是id的原因。我们可以大胆的用双引号去找id,因为字符串里面的双引号是被转义的,所以匹配不会出错。由于id是数字,所以我们用\d+就可以了。接着是一个的非获取匹配,里面是匹配字段的。我们让它匹配*次,这样如果在中间的字段中搜索不到我们需要的文字就会跳过,直到搜索到需要的字段。这个非获取匹配的最后用了双引号或又大括号来判断字段的结束。接着是最后的部分,是我们需要搜索的那个字段,我们在字段名使用了获取匹配,所以我们可以在返回的结果中看到匹配到数据的字段。上面的正则表达式看起来也许很乱,这是因为各种转义的原因,如果你想看清楚就把它还原成用斜杆括起来的正则表达式,那样你就很容易看懂它。正则表达式这东西用语言也很难描述的,如果你们有哪个地方看不明白的可以提出来。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^