用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 相关文章推荐
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
Node.js学习入门
Jan 03 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
微信小程序如何获取用户手机号
Jan 26 Javascript
基于layui框架响应式布局的一些使用详解
Sep 16 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 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中文字母数字验证码实现代码
2008/04/25 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python矩阵转换为一维数组的实例
2018/06/05 Python
在双python下设置python3为默认的方法
2018/10/31 Python
详解爬虫被封的问题
2019/04/23 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python matplotlib库的基本使用
2020/09/23 Python
关于Python错误重试方法总结
2021/01/03 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
业务代表的岗位职责
2013/11/16 职场文书
铣工实训报告
2014/11/05 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
保留意见审计报告
2015/06/05 职场文书
2016年过年放假安排通知
2015/08/18 职场文书