按顺序匹配正则表达式模式
Matching regex patterns in order
我正在构建一个迷你解析器,它将获取图像或附件,并构建一个数据数组供以后使用。
我可以用我的模式成功地解析我的数据,但是,解析原始文本的方式是运行两个单独的匹配循环来获取数据并推入数组。
因此,我的最终数组中数据的顺序相对于原始文本是无序的。这里有一个例子:
原始数据
[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++;
}
您可以将所有内容放在一个模式中:
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++;
}
如果输入总是成对的,那么你可以将它们插入到你的"数组"中(注意,你称之为"数组"的实际上不是,它是一个普通的"对象"),如下所示:
//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"项。
相关文章:
- _water_glass的javascript正则表达式模式
- 需要正则表达式模式的帮助
- 正则表达式模式与各种端点匹配
- JavaScript 中 URL 的正则表达式模式
- Java 与 Javascript 中的正则表达式模式
- 将Javascript正则表达式模式转换为C++std::regex的规则
- 如何从字符串构造正则表达式模式
- 城市和州正则表达式模式
- 如何在字符串上组合JS replace()方法中的3个正则表达式模式
- JavaScript中的递归正则表达式模式
- 正则表达式模式匹配特定单词
- 什么正则表达式模式将从包含的外部HTML文本中提取内部HTML
- 将特定的正则表达式模式与我的字符串匹配
- 为电子邮件开发正则表达式模式
- 将HTML5正则表达式模式转换为JavaScript正则表达式
- 我的正则表达式模式不起作用
- 将字符串中的正则表达式模式替换为依赖于匹配项的替换字符串
- 数字、字母块的正则表达式模式匹配
- Q>javascript 正则表达式模式
- 验证字符串是否为正则表达式模式的开头