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

Get the string between two symbols in a string and push them to an array

本文关键字:字符串 数组 之间 两个 获取 符号      更新时间:2023-09-26

我会有一个类似下面的字符串

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 arr = [["A","This text belongs to A.
Dummy Text of A."],["B","This text belongs to B.
Dummy Text of B."] etc...]  

请帮我一下。我怎样才能做到。。。

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);
}

我想到了这个:

str.match(/-#([A-Z]) ([a-zA-Z. ]+)/g).map(function (i) {
   return i.split(/-#([A-Z])/).splice(1)  
})

地图在IE 8中不起作用,但有大量的垫片。mdn文档

示例

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可以在这里找到。

正则表达式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."]
]

您要查找的是捕获组。当您有一个正则表达式匹配适当的部分时,您可以使用捕获组来获取该部分并将其放入数组中。请参阅"如何访问JavaScript正则表达式中匹配的组?"的答案?。

如果你根本不知道如何使用regex,你应该找一个关于它的教程,并尝试一些,这样你就可以得到一个更具体的问题,这样你就能回答http://whathaveyoutried.com/.