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"]
以下是针对您的问题的jQuery版本:var string=“123asd”; var contents=string.split(/|/); contents=contents.filter(函数(el){return el!=“”}) console.log(目录)/[“123”,“asd”]
$("<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
对其进行分隔,或者使用/
创建一个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,因为这样的事情。。new RegExp