0

我正在构建一个迷你解析器,它将获取图像或附件并构建一个数据数组供我以后使用。

我可以使用我的模式成功解析我的数据,但是,我解析原始文本的方式是运行两个单独的匹配循环来获取数据并推送到一个数组中。

结果,我的最终数组中的数据顺序相对于原始文本是乱序的。这是一个例子:

原始数据

[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

您可以将所有内容放在一个模式中:

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 回答