Javascript:正则表达式从字符串中获取值

时间:2011-08-01 14:08:52

标签: javascript regex

我吮吸正则表达式所以需要一些帮助,如果我将下面的字符串传递给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";

或换句话说,数组的第一部分是标签名称,另一部分是其属性。

谢谢!

4 个答案:

答案 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. 使用空格拆分字符串。
  2. 遍历属性对数组并按=分割。
  3. 删除双引号并结束标记。

答案 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;
    }
}

它没有经过全面测试,它做了很多假设,但我希望它可以给你一个想法。