Javascript 实现字符串标记器的好方法(或使用已建立的标记器)
我发现自己陷入了两个新手错误中的一个:Javascript 实现字符串标记器的好方法(或使用已建立的标记器),javascript,regex,parsing,tokenize,Javascript,Regex,Parsing,Tokenize,我发现自己陷入了两个新手错误中的一个: 编写我应该从库中获取的代码 使用更好的模式编写可以大大简化的超复杂代码 我想做的很简单,我需要向一些JavaScript代码发送指令,这些代码将字段从对象打印到页面。事情一开始进展顺利,如下: message, tags, date 轻松指示代码使用 field_array = instruction_string.split(',') obj['message'], obj['tags'], obj['date'] 然后我意识到我想修改日期字段以反
message, tags, date
轻松指示代码使用
field_array = instruction_string.split(',')
obj['message'], obj['tags'], obj['date']
然后我意识到我想修改日期字段以反映我所在的时区。启用字符串携带字段的特殊指令增加了正则表达式的复杂性,但仍然不太复杂:
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
的对象,您可以查找其他属性。您还可以非常轻松地添加新属性。问题在于信息需要来自字符串。最终,它可以在这样一个对象中,但它需要以字符串开始。如果字符串是JSON,它可以简单地转换为这样一个对象。