我吮吸正则表达式所以需要一些帮助,如果我将下面的字符串传递给someFunction(str)
<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">
我怎样才能像这样取回一个数组:
arr[table] = "";
arr[width] = "100%";
arr[border] = "border";
arr[cellspacing] = "cellspacing";
arr[bgcolor] = "cellpadding";
或换句话说,数组的第一部分是标签名称,另一部分是其属性。
谢谢!
答案 0 :(得分:2)
这是我处理它的方式:
var str = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'
var arySplits = str.split(' ');
var aryFinalVals = new Array();
for (var i = 0; i < arySplits.length; i++) {
var arySubSplits = arySplits[i].split('=');
aryFinalVals[arySubSplits[0].replace(/</, '')] = (arySubSplits[1]) ? arySubSplits[1].replace(/"/g, '').replace(/>/, '') : '';
}
摘要:
=
分割。答案 1 :(得分:0)
你可以试试这个:
/([a-z]+)="([a-z0-9%]+)"/g
这很快又很脏,但对变化不太敏感...更“盲目”:
/([^=]+)=("[^"]+")/g
后者将匹配=
之前=
之前的所有内容,然后忽略=
并匹配"
之间的内容。
答案 2 :(得分:0)
如果您只想将字符串转换为DOM对象,您应该能够使用innerHTML来调用浏览器的HTML解析器:
var strToObj = function(str) {
var el = document.createElement('div');
el.innerHTML = str;
return el.childNodes[0];
}
document.body.appendChild(strToObj('<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'))
答案 3 :(得分:0)
快速而肮脏的概念证明:
var input = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">';
var properties = {};
var tempNode = document.createElement("div");
tempNode.innerHTML = input;
for(var p in tempNode.firstChild.attributes){
if( tempNode.firstChild.attributes.hasOwnProperty(p) ){
properties[tempNode.firstChild.attributes[p].name] = tempNode.firstChild.attributes[p].value;
}
}
它没有经过全面测试,它做了很多假设,但我希望它可以给你一个想法。