操纵.replace()匹配

时间:2014-04-24 20:44:38

标签: javascript regex

我有这样的文字字符串:

1398097442.61 INFO Some Name: Some Thing ...9381

我想将开头的数字转换为人类可读的日期时间。

我正在做的是:

input.replace(/^(\d+\.?\d*)/g, new Date(parseFloat("$1") * 1000).toGMTString());

这不起作用。如果我只是重印这场比赛" $ 1"没关系。我该如何操纵比赛?

2 个答案:

答案 0 :(得分:3)

确保传递一个要替换的函数(毕竟,这不是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行为包装在函数中,一切都可以正常工作。

答案 1 :(得分:1)

你可能需要这个:

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/