0

我有一个如下所示的 HTML 字符串

var hoverData = "<table id='hvr-revision_history'><tr><td>{date_value}2013-07-29T11:52:38Z{date_value}</td><td>Error1</td></tr><tr><td>{date_value}2013-07-30T11:52:38Z{date_value}</td><td>Error2</td></tr><tr><td>{date_value}2013-07-31T11:52:38Z{date_value}</td><td>Error3</td></tr></table>";

需要的最终输出是

"<table id='hvr-revision_history'><tr><td>07/29/2013 11:52:38 AM</td><td>Error1</td></tr><tr><td>07/30/2013 11:52:38 AM</td><td>Error2</td></tr><tr><td>07/31/2013 11:52:38 AM</td><td>Error3</td></tr></table>"

我的方法是

var sindex = 0;
while(true){
    var sindex = hoverData.indexOf("{date_value}"); //startindex
    if(sindex <0)
        break;
    var eindex = hoverData.indexOf("{date_value}",sindex+1); //endindex
    var date = hoverData.substring(sindex+12,eindex); //string between {date_value} tags, so 2013-07-29T11:52:38Z
    //logic to parse the date
    var hoverData = hoverData.replace(date,parsedDate);                     
}
var hoverData = hoverData.replace("{date_value}","");

有更好的方法吗?如果我有 2 个或更多日期完全相同,我的代码将失败。

4

1 回答 1

1

您可以将单个日期块匹配为正则表达式,并使用函数(而不是字符串)作为替换。该函数可以调用您的 parse 函数,因为您没有包含它,所以我在这里删除了它。

var hoverData = "<table id='hvr-revision_history'><tr>" +
  "<td>{date_value}2013-07-29T11:52:38Z{date_value}</td>" +
  "<td>Error1</td></tr>" + 
  "<tr><td>{date_value}2013-07-30T11:52:38Z{date_value}</td>" + 
  "<td>Error2</td></tr>" +
  "<tr><td>{date_value}2013-07-31T11:52:38Z{date_value}</td>" +
  "<td>Error3</td></tr></table>";

// your "logic to parse the date" would go here
function parseDate(str) {
    return "( parsed " + str + " )";    
}

// look for our delimiters with *only* the legal timestamp 
// characters between them
hoverData = hoverData.replace(/\{date_value\}([A-Z0-9\-\:]+)\{date_value\}/g,

    // match gets the fully-matched string, plus any captured patterns 
    // (the parenthesized chunk) as separate parameters. `datepart` will
    // contain the matched timestamp string only

    function (match, datepart) {
      return parseDate(datepart);
   }
);

hoverData = hoverData.replace("{date_value}","");

在此处查看实际操作:http: //codepen.io/paulroub/pen/CGqlh

于 2013-08-01T22:50:06.217 回答