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'] 然后我意识到我想修改日期字段以反

我发现自己陷入了两个新手错误中的一个:

  • 编写我应该从库中获取的代码
  • 使用更好的模式编写可以大大简化的超复杂代码
  • 我想做的很简单,我需要向一些JavaScript代码发送指令,这些代码将字段从对象打印到页面。事情一开始进展顺利,如下:

    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,它可以简单地转换为这样一个对象。