获取字符串中两个符号之间的字符串并将它们推送到数组

时间:2012-01-18 03:31:21

标签: javascript regex

我会有一个像下面的字符串

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...]  

请帮我解决这个问题。我怎样才能完成......

5 个答案:

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

Example

答案 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/