正在操作.replace()匹配



我有一个这样的文本字符串:

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/

最新更新