用JavaScript对JSON进行模式匹配(Part 1-设计)


Posted in Javascript onJuly 17, 2010

至于筛选条件的描述,模式匹配是一种很常见也很好用的方式。在 JavaScript 里面,用 JSON 来描述模式又是相当方便的事情,所以我们来做一个 JSON 模式匹配工具吧。

用例设计
作为一个 dispatcher ,我们只需要两个方法: notify 和 capture 。一个最简单的用例是这样的:

Dispatcher.capture({ 
"status": 200, 
"command": "message" 
}, function(json) { /* display message */ }); Dispatcher.notify({ 
“status": 200, 
"command": "message", 
"content": { 
"from": "user1", 
"to": "user2", 
"text": "hello" 
} 
});

当然,只有局部的全等匹配是不够的,我们还需要一些其他运算符。
Dispatcher.capture({ 
"value1$eq": "hello", /* equal */ 
"value2$ne": true, /* not equal */ 
"value3$lt": 0, /* less than */ 
"value4$lte: 1, /* less than or equal */ 
"value5$gt": 2, /* greater than */ 
"value6$gte": 3, /* greater than or equal */ 
"value7$in": [1, 3, 5, 7, 9], /* in */ 
"value8$nin": [2, 4, 6, 8, 10], /* not in */ 
"value9$all": [1, 2, 3, 4, 5], /* all */ 
"value10$ex": true, /* exists */ 
"value11$re": /^A.*/, /* regular expression */ 
"value12$ld": function(json) { return true; } /* lambda */ 
}, function(json) {}); Dispatcher.notify({ 
"value1": "hello", 
"value2": false, 
"value3": -1, 
"value4": 1, 
"value5": 3, 
"value6": 3, 
"value7": 5, 
"value8": 5, 
"value9": [1, 3, 5, 2, 4], 
"value10": "hello", 
"value11": "A13579", 
"value12": "anything" 
})

随手写下来一堆运算符,看起来实现会很复杂?其实不会有多复杂。在下一篇文章里面,我们会讨论如何设计一个运算符接口,然后逐一实现这些运算符。
Javascript 相关文章推荐
用Javascript 和 CSS 实现脚注(Footnote)效果
Sep 09 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
javascript面向对象之二 命名空间
Feb 08 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
javascript中的深复制详解及实例分析
Dec 29 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
Nov 20 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
Nov 28 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 Javascript
浅谈vue异步数据影响页面渲染
Oct 29 Javascript
关于flash遮盖div浮动层的解决方法
Jul 17 #Javascript
JQUERY获取form表单值的代码
Jul 17 #Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 #Javascript
flexigrid 类似ext grid的JS表格代码
Jul 17 #Javascript
基于JQuery的Pager分页器实现代码
Jul 17 #Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 #Javascript
JS延迟加载(setTimeout) JS最后加载
Jul 15 #Javascript
You might like
我的论坛源代码(九)
2006/10/09 PHP
PHP四大安全策略
2014/03/12 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
php常用文件操作函数汇总
2014/11/22 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python中的decorator的作用详解
2018/07/26 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
大学生村官典型材料
2014/01/12 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
小学德育工作总结2015
2015/05/12 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL