0

画像や添付ファイルを取り、後で自分で使用するためにデータの配列を作成するミニ パーサーを作成しています。

パターンを使用してデータを正常に解析できますが、元のテキストを解析する方法は、2 つの個別の一致ループを実行してデータを取得し、配列にプッシュすることです。

その結果、最終的な配列内のデータの順序は、元のテキストに対して順不同になります。次に例を示します。

元データ

[ATTACH]1234[/ATTACH]
[IMG]http://www.google.com/abc.gif[/IMG]
[ATTACH]5678[/ATTACH]
[IMG]http://www.google.com/def.gif[/IMG]

結果配列

0 : http://www.google.com/abc.gif
1 : http://www.google.com/def.gif
2 : 1234
3 : 5678

実際には、結果の配列を次のようにしたいと思います

目的の結果配列

0 : 1234
1 : http://www.google.com/abc.gif
2 : 5678
3 : http://www.google.com/def.gif

これは、私がこれを行うために使用しているコードの短縮版です

//Container Array of Images
var imagesContainerArray = {};
var daC = 0;
var finalData = {};


//Individual Images 
var pattern = /\[IMG]([\s\S]*?)\[\/IMG\]/gi;
var match;

while (match = pattern.exec(text)) {  

    finalImageUrl = match[1];

            //Other stuff i'm doing 

    imagesContainerArray[daC] = finalImageUrl;

    daC++;
}

//Individual ATTACH 
var pattern = /\[ATTACH]([\s\S]*?)\[\/ATTACH\]/gi;
var match;

while (match = pattern.exec(text)) {  

    finalImageUrl = match[1];

            //Other stuff i'm doing 

    imagesContainerArray[daC] = finalImageUrl;

    daC++;
}
4

2 に答える 2

1

すべてを 1 つのパターンにまとめることができます。

var pattern = /\[(IMG|ATTACH)]([\s\S]*?)\[\/\1\]/gi;
var match;

while (match = pattern.exec(text)) {  

    finalImageUrl = match[2];

    imagesContainerArray[daC] = finalImageUrl;

    daC++;
}

タグ名に応じて異なる処理を適用するには、switch/case ステートメントを使用できます。例:

var pattern = /\[(IMG|ATTACH)]([\s\S]*?)\[\/\1\]/gi;
var match;

while (match = pattern.exec(text)) {  

    finalImageUrl = match[2];

    switch (match[1].toUpperCase()) {
        case "IMG":    ...
                       break;
        case "ATTACH": ...
                       break;
        ...
    }

    imagesContainerArray[daC] = finalImageUrl;

    daC++;
}
于 2013-06-22T14:14:57.240 に答える
0

入力が常にそのようなペアになっている場合は、次のように「配列」に挿入できます (「配列」と呼んでいるものは実際にはそうではなく、単純な「オブジェクト」であることに注意してください)。

//Individual Images 
var pattern = /\[IMG]([\s\S]*?)\[\/IMG\]/gi;
var match;
daC = 1;  // <=- Note starting index
while (match = pattern.exec(text)) {
    finalImageUrl = match[1];
            //Other stuff i'm doing 
    imagesContainerArray[daC] = finalImageUrl;
    daC+=2;
}
//Individual ATTACH 
var pattern = /\[ATTACH]([\s\S]*?)\[\/ATTACH\]/gi;
var match;
daC = 0;  // <=- Note starting index
while (match = pattern.exec(text)) {
    finalImageUrl = match[1];
            //Other stuff i'm doing 
    imagesContainerArray[daC] = finalImageUrl;
    daC+=2;
}

つまり、偶数インデックスの「ATTACH」アイテムを挿入し、奇数インデックスの「IMG」アイテムを挿入します。

于 2013-06-22T14:10:07.483 に答える