0

发现自己陷入了两个新手错误之一的境地:

  1. 编写我应该从库中取出的代码
  2. 编写超级复杂的代码,使用更好的模式可以大大简化

我要做的很简单,我需要向一些 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'

尽管可能有一种方法可以修复正则表达式,但这表明我应该使用工具或已建立的模式来执行此操作,而不是在风口浪尖上编写自定义代码并用它来搞砸太久。

4

1 回答 1

1

您确定要为此使用字符串和正则表达式吗?

另一种方法是使用数组和对象来定义应打印的字段。

像这样的东西:

var fields = [{
   name: 'message'
}, {
   name: 'tags'
}, {
   name: 'date',
   timezone: 'GMT-5',
   since: new Date() // now
}];

要从中获取确定要打印的值,您可以遍历数组并查找该name字段。如果您找到一个具有名称的对象,date您可以查找其他属性。您还可以非常轻松地添加新属性。

于 2013-01-12T18:45:31.233 回答