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

Javascript 从字符串[JS]获取td的innerhtml,javascript,regex,Javascript,Regex,假设我有以下字符串: var string = "<td>123</td><td>asd</td>"; var string=“123asd”; 我想获取td的值,并将它们放入一个数组中。我尝试使用foreach函数,但我的正则表达式在第一次关闭td后停止,并获取之间的所有内容 var regex = '<([^<> ]*)([^<>]*)?>([^>]*)<\/([^<>]*)>

假设我有以下字符串:

var string = "<td>123</td><td>asd</td>";
var string=“123asd”;
我想获取td的值,并将它们放入一个数组中。我尝试使用foreach函数,但我的正则表达式在第一次关闭td后停止,并获取之间的所有内容

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

result.forEach(function($var){
    console.log($var);
});
var regex='([^>]*);
var string=“123asd”;
var result=string.match(regex);
result.forEach(函数($var){
console.log($var);
});
输出:

<td>123</td>
td
undefined
123
td 
123
运输署
未定义
123
运输署
我需要操纵这些值,这样我就可以直接在foreach函数中工作,而无需首先拆分为数组


我可以用正则表达式来做这个吗?我无法使用jQuery或将字符串附加到html。

您可以尝试以下代码

> var re = /[^<>]+(?=<\/)/g;
undefined
> var result = string.match(re);
undefined
> result.forEach(function($var){
... console.log($var);
... });
123
asd
> console.log(result);
[ '123', 'asd' ]
>var re=/[^]+(?=var result=string.match(re);
未定义
>result.forEach(函数($var){
…console.log($var);
... });
123
自闭症
>控制台日志(结果);
['123','asd']
说明:

  • [^]+
    匹配任何非
    的字符一次或多次

  • (?=使用
    中的任何一个拆分字符串,并拒绝

    这对你有用

    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"]
    
    var string=“123asd”;
    var contents=string.split(/|/);
    contents=contents.filter(函数(el){return el!=“”})
    console.log(目录)/[“123”,“asd”]
    

    以下是针对您的问题的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
    
    $(“”)。追加(“123asd”)//用单元格生成一行
    .find(“td”)//获取单元格
    .map(函数(){return$(this).text();});//对于每个单元格,获取内容
    
    结果:
    [“123”,“asd”]


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

    单独使用正则表达式解析DOM是不可能的。然而

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

    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);
    
    var string=“123asd”;
    var tds=string.split(“”);
    var值=[];
    
    对于(var i=0;i避免使用正则表达式解析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>"));
    
    函数提取值(代码)
    {
    var tr=document.createElement('tr');
    tr.innerHTML=代码;
    var tds=values.getElementsByTagName('td');
    var值=[];
    对于(变量i=0;i
    如果确实需要正则表达式,请使用以下命令:

    /<td>((?:.(?!<\/td>))*.?)<\/td>/g
    
    /((?:(?!)*。?)/g
    
    您的
    regex
    变量只包含一个字符串,而不是
    RegExp
    对象。您需要使用
    /
    对其进行分隔,或者使用
    new RegExp
    创建一个RegExpvar str=str.replace(“”“”),然后使用var res=str.split(“”);?@dwana我不确定我的td是否有classess或styles,因此我不能确定replace是否会获得所有正确的结果。最好不要使用RegExp来处理HTML。你应该使用HTML DOM解析器。效果很好,但我想将字符串作为整行表示ex.“value”这样一来,第一个值就是value,然后去掉tr包装器,或者去掉一个子字符串,或者用regexof当然不是..这是substr(4)…这是空的tds..不过没关系,这种方法都是错误的-你不应该像我提到的那样用regexes作为子字符串解析DOM,因为这样的事情。。