1

私はこのようなタグを持っていますが、それらの属性のすべてのキーと値を取得して配列内に入力するための最良の方法はありますか(属性の数は増加します)?

myData = '[data attr1="value1" attr2="value2" attr3="value3"]';

結果の配列を取得します:

var arr = new Array();
arr['attr1'] = "value1";
arr['attr2'] = "value2";
arr['attr3'] = "value3";
and so on...
4

3 に答える 3

2

これはおそらくあなたが望むことをしますが、tagがすでにあなたが記述した形式、つまり の特異な出現であると想定しています[data ... ]

また、正規表現は、私があなたの質問で見たものに純粋に基づいています。他の弦で壊れるかどうかはわかりません。

function decode(tag)
{
    var r = /(\w+)="([^"]*)"/g,
    h = {};
    while ((m = r.exec(tag)) !== null) {
        h[m[1]] = m[2];
    }
    return h;
}
于 2012-06-27T06:56:44.800 に答える
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);

このコードを試してください。それはあなたを助けるかもしれません。

デモはこちら

ただし、コードについてさらに詳細を追加すると、より最適化できます。

于 2012-06-27T07:16:52.770 に答える
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'}}]

これは、文字列内の任意の数のタグに対して機能します。タグの名前は関係ありません。

于 2012-06-27T07:00:28.527 に答える