从字符串[JS]获取td的innerhtml

时间:2014-07-29 11:14:48

标签: javascript regex

假设我有以下字符串:

var string = "<td>123</td><td>asd</td>";

我想获取td的值并将它们放在一个数组中。我尝试使用foreach函数,但我的正则表达式在第一次关闭td后停止并获取&lt;之间的所有内容。和&gt;。

var regex = '<([^<> ]*)([^<>]*)?>([^>]*)<\/([^<>]*)>';
var string = "<td>123</td><td>asd</td>";
var result = string.match(regex);

result.forEach(function($var){
    console.log($var);
});

输出:

<td>123</td>
td
undefined
123
td 

我需要操作这些值,这样我就可以直接在foreach函数中工作,而无需先拆分成数组。

我可以使用正则表达式来完成这项工作吗?我不能使用jQuery或将字符串附加到html。

5 个答案:

答案 0 :(得分:1)

单独使用regex来解析DOM是一个禁忌。然而..

如果您没有嵌套<td>,可以使用以下代码获取值数组:

var string = "<td>123</td><td>asd</td>";
var tds = string.split("</td>");
var values = [];

for(var i=0; i<tds.length-1; i++){ //last element is empty if you split like this
    values.push(tds[i].substr(4)); //ommit the "<td>"
}

alert(values);

更复杂的结构可能是一个问题,我建议你将TD分解为单独的,然后使用正则表达式(/<td>(.*)</td>/g并选择组1)提取值。但是对于这个例子,它工作正常。

jsFiddle

答案 1 :(得分:0)

您可以尝试以下代码,

> var re = /[^<>]+(?=<\/)/g;
undefined
> var result = string.match(re);
undefined
> result.forEach(function($var){
... console.log($var);
... });
123
asd
> console.log(result);
[ '123', 'asd' ]

<强>解释

  • [^<>]+匹配任何不属于<>的字符一次或多次。
  • (?=<\/) Lookahead声称以下任何内容必须为</

答案 2 :(得分:0)

使用<td></td>中的任何一个拆分字符串,并拒绝""

这对你有用

var string = "<td>123</td><td>asd</td>";
var contents = string.split(/<td>|<\/td>/);
contents = contents.filter(function(el){return el != ""})

console.log(contents) //["123","asd"]

答案 3 :(得分:0)

Do not parse HTML using RegExp!

这是针对您的问题的jQuery版本:

$("<tr/>").append("<td>123</td><td>asd</td>") // build a row with the cells
.find("td") // get the cells
.map(function() { return $(this).text(); }); // for each cell, get the content

结果:["123", "asd"]

编辑:我发现你不能使用jQuery,这很不幸,因为你真的需要一个DOM解析器,jQuery很优雅,可以做更多。

答案 4 :(得分:0)

避免使用正则表达式解析HTML / XML!

我想用JavaScript做一个简单的方法:

function extractValues(code)
{
    var tr = document.createElement('tr');
    tr.innerHTML = code;
    var tds = values.getElementsByTagName('td');
    var values = [];
    for (var i = 0; i < tds.length; i++) {
        values.push(tds[i].innerHTML);
    }

    return values;
}

console.log(extractValues("<td>123</td><td>asd</td>"));

如果你真的想要一个正则表达式,请使用:

/<td>((?:.(?!<\/td>))*.?)<\/td>/g