我会有一个像下面的字符串
var str = "-#A
This text belongs to A.
Dummy Text of A.
-#B
This text belongs to B.
Dummy Text of B.
-#C
This text belongs to C.
Dummy text of C.
-#Garbage
This string should be ignored"
我想要一个如下所示的数组,忽略带有“Garbage”的文本标题
var arr = [["A","This text belongs to A.
Dummy Text of A."],["B","This text belongs to B.
Dummy Text of B."] etc...]
请帮我解决这个问题。我怎样才能完成......
答案 0 :(得分:2)
var str="...";
var ar=str.split('-#');
var res=new Array();
for (var s in ar) {
if (s=='') continue;
var b=ar[s].split('\n');
var name=b.shift();
if (name=='Garbage') continue;
b=b.join('\n');
res[res.length]=new Array(name,b);
}
答案 1 :(得分:1)
我想出了这个:
str.match(/-#([A-Z]) ([a-zA-Z. ]+)/g).map(function (i) {
return i.split(/-#([A-Z])/).splice(1)
})
地图在IE 8中不起作用,但是有大量的垫片。 mdn docs
答案 2 :(得分:1)
var str = str.split("-#");
var newStr=[];
for(var i = 0; i < str.length; i++) {
if(str[i] != "" && str[i].substr(0,7) != 'Garbage') newStr.push(str[i]);
}
console.log(newStr);
可以找到测试jsFiddle here。
答案 3 :(得分:1)
正则表达式exec允许您使用更简单的模式进行全局匹配。
匹配可以在索引中包含'#Garbage',在构建数组时可以忽略该索引。
var str= "-#A This text belongs to A. Dummy Text of A.-#B This text belongs to B. Dummy Text of B.-#C This text belongs to C. Dummy text of C.-#Garbage This string should be ignored"
var M, arr= [], rx=/-#((Garbage)|(\w+)\s*)([^-]+)/g;
while((M= rx.exec(str))!= null){
if(M[3]){
arr.push(['"'+M[3]+'"', '"'+M[4]+'"']);
}
}
// arr>>
// returned value: (Array)
[
["A", "This text belongs to A. Dummy Text of A."],
["B", "This text belongs to B. Dummy Text of B."],
["C", "This text belongs to C. Dummy text of C."]
]
答案 4 :(得分:0)
您正在寻找的是捕获组。当您具有与相应部分匹配的正则表达式时,可以使用捕获组来获取该部分并将其放入数组中。请参阅How do you access the matched groups in a JavaScript regular expression?的答案。
如果您根本不知道如何使用正则表达式,那么您应该查找一个教程并尝试一些,以便您可以获得更具体的问题,以便您可以回答http://whathaveyoutried.com/。