用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中的有名函数和无名函数
Oct 17 Javascript
Extjs学习笔记之九 数据模型(上)
Jan 11 Javascript
javascript中[]和{}对象使用介绍
Mar 20 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
Jan 28 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
JavaScript 异步调用
Oct 25 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
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
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python实现图片批量剪切示例
2014/03/25 Python
python在windows下实现备份程序实例
2014/07/04 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
详解Python编程中time模块的使用
2015/11/20 Python
python实现定时提取实时日志程序
2018/06/22 Python
python3实现逐字输出的方法
2019/01/23 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
《雨霖铃》听课反思
2014/02/13 职场文书
和睦家庭事迹
2014/05/14 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
公证处委托书
2015/01/28 职场文书
春季运动会加油词
2015/07/18 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书