我有这样的标签,如何获得这些属性的每个键和值并在数组中填充它的最佳方法(属性数量会增加)?
myData = '[data attr1="value1" attr2="value2" attr3="value3"]';
并获取结果数组:
var arr = new Array();
arr['attr1'] = "value1";
arr['attr2'] = "value2";
arr['attr3'] = "value3";
and so on...
答案 0 :(得分:2)
这可能会做你想要的,虽然它假设tag
已经采用你所描述的格式,即[data ... ]
的单数出现。
此外,正则表达式纯粹基于我在你的问题中看到的内容;不确定它是否会破坏其他字符串。
function decode(tag)
{
var r = /(\w+)="([^"]*)"/g,
h = {};
while ((m = r.exec(tag)) !== null) {
h[m[1]] = m[2];
}
return h;
}
答案 1 :(得分:1)
由于数据中有字符串键,因此请使用jquery对象而不是数组。
var arr = {};
var str = '[data attr1="value1" attr2="value2" attr3="value3"]';
var n = str.split('[data ');
var str_arr = n[1].replace(']','').split(" ");
jQuery.each(str_arr,function(val){
var x = str_arr[val].split('=');
arr[x[0]] = x[1].replace('"','').slice(0,-1);
});
console.log(arr);
试试这段代码。它可能对你有帮助。
以下是DEMO
如果您提供有关代码的更多详细信息,可以进行更优化。
答案 2 :(得分:0)
var tagRe = /\[(\w+)((?:\s+\w+="[^"]{0,50}")*)\s*]/g;
var attrRe = /\b(\w+)="([^"]*)"/g;
function parse(text) {
var result = [];
tagRe.lastIndex = 0; // reset start position
var tagMatch = tagRe.exec(text);
while (tagMatch) {
var currentTag = { 'name': tagMatch[1], 'attrs': {} };
var attrString = tagMatch[2];
attrRe.lastIndex = 0;
var attrMatch = attrRe.exec(attrString);
while (attrMatch) {
var attrName = attrMatch[1];
var attrValue = attrMatch[2];
currentTag.attrs[attrName] = attrValue;
attrMatch = attrRe.exec(attrString); // next match
}
result.push(currentTag);
tagMatch = tagRe.exec(text);
}
return result;
}
parse('[data attr1="value1" attr2="value2" attr3="value3"]');
> [{name:'data',attrs:{attr1:'value1',attr2:'value2',attr3:'value3'}}]
这适用于字符串中的任意数量的标记。标签的名称无关紧要。