我有一个这样的文本字符串:
1398097442.61 INFO Some Name: Some Thing ...9381
我想把开头的数字转换成一个可读的日期时间。
我正在做的是:
input.replace(/^(d+.?d*)/g, new Date(parseFloat("$1") * 1000).toGMTString());
这行不通。如果我只是重印比赛"1美元",那没关系。我该如何操纵比赛?
只需确保您正在传递一个要替换的函数(毕竟,这不是Scala):-)
input.replace(/^(d+.?d*)/g, function(match, timestamp) {
return new Date(parseFloat(timestamp) * 1000).toGMTString();
});
按照的操作方式,根据对字符串"$1"调用parseFloat
的结果创建了一个日期,然后获取结果(NaN
)并将其传递给Date
构造函数,得到一个GMT字符串-然后将其用作正则表达式的替换字符串。
希望推迟执行new Date
代码,直到匹配为止。由于String.prototype.replace
可以将函数作为它的第二个参数,所以我们可以将new Date
的行为封装在函数中,一切都会正常工作。
您可能需要这个:
var subject = "1398097442.61 INFO Some Name: Some Thing ...9381";
var date = new Date(parseFloat(subject.replace(/(d+.d+)/g, "$1")) * 1000).toGMTString();
console.log(date);
演示:
http://jsfiddle.net/tuga/xh2G6/