实现字符串标记器的好方法(或者使用已经建立的)
A good way to implement a string tokenizer ( or use one that's already established )
我发现自己在一个情况下,我犯了两个新手错误之一:
- 编写我应该从库中取出的代码
- 编写超级复杂的代码,可以使用更好的模式大大简化
我想做的很简单,我需要向一些JavaScript代码发送指令,从对象打印字段到页面。事情开始很好,下面的字符串:
message, tags, date
很容易指示代码使用
从对象中获取这些元素field_array = instruction_string.split(',')
obj['message'], obj['tags'], obj['date']
然后我意识到我想修改日期字段以反映我所在的时区。允许字符串携带字段的特殊指令增加了一点regex的复杂性,但仍然不是太复杂:
message, tags, date(GMT-5)
使用代码:
var special_instruction = /'(.*')/ig.exec('date(GMT-5)')[2]
RESULT: special_instruction = 'GMT-5'
当我意识到我还想告诉输出调整日期,使其反映从现在开始的时间增量,而不是打印实际日期时,我意识到我有点不知所措:
message, tags, date(GMT-5_)(SINCE_NOW)
我写的正则表达式不工作:
var special_instruction = /'((.*)')/ig.exec('last_updated(GMT-5)(since_now)')
RESULT: special_instruction = 'GMT-5)(since_now'
虽然可能有一种方法可以修复正则表达式,但这表明我应该使用工具或已建立的模式来完成此操作,而不是在顶部编写自定义代码并长时间地使用它。
您确定要为此使用字符串和正则表达式吗?
另一种选择是使用数组和对象来定义应该打印的字段。
像这样:
var fields = [{
name: 'message'
}, {
name: 'tags'
}, {
name: 'date',
timezone: 'GMT-5',
since: new Date() // now
}];
要从确定要打印的值中获取值,您可以遍历数组并查找name
字段。如果您找到一个名称为date
的对象,您可以查找其他属性。你也可以很容易地添加新的属性
相关文章:
- 如何删除除冒号、数字和'上午'或者'下午'
- 实现一个建立在google.com之上的自定义搜索引擎
- 如何“;过滤器”;或者以其他方式重构该数据
- 哪个布尔运算更快<或者<=
- 如何建立一个网页,检查我的路由器网络接口是否可以访问
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 或者在表单上选择默认选项文本(选择1)
- 用真或假初始化变量是否在 Javascript 中建立了内容的方向
- 试图修改此javascript代码以减小弹出窗口的大小,或者在用户单击框外时关闭
- JQuery是否有一个“;移动“;作用或者有没有一种更紧凑的方法来做到这一点
- 咖啡'@'或者这在函数和类中
- Bootstrap CSS和JS我必须将它们包含在单独的文件中,或者可以编译它们
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- 使用CloudFront和AmazonS3,或者其他CDN,我可以将所有类似的请求发送到一个静态文件中
- 建立phonegap/cordova iOS p2p视频聊天
- Tabrisjs无法建立连接包.json文件
- Mongoose:布尔型'或者'使用通配符查询
- 在按钮'上运行PHP代码;s onclick事件,或者使用Ajax
- jQuery addClass中断延迟,或者jQuery延迟中断CSS转换,或者两者兼而有之
- 实现字符串标记器的好方法(或者使用已经建立的)