用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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
javascript中字符串拼接需注意的问题
Jul 13 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
jQuery在header中设置请求信息的方法
Mar 06 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 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/03/06 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
一端时间轮换的广告
2006/06/26 Javascript
JQuery 常用方法基础教程
2009/02/06 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
Javascript函数的参数
2015/07/16 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
Python-split()函数实例用法讲解
2020/12/18 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
开办饭店创业计划书
2013/12/28 职场文书
营销与策划专业求职信
2014/06/20 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL