我的文字看起来像是:
some non interesting part
trans-top
body of first excerpt
trans-bottom
next non interesting part
trans-top
body of second excerpt
trans-bottom
non interesting part
我想提取所有以trans-top开头并以trans-bottom结尾的摘录为数组。我试过了:
match(/(?=trans-top)(.|\s)*/g)
找到以trans-top开头的字符串。它有效。现在我想指定结束:
match(/(?=trans-top)(.|\s)*(?=trans-bottom)/g)
并没有。 Firebug给了我一个错误:
正则表达式过于复杂
我尝试了许多其他方法,但我找不到合适的解决方案......我很害羞,我犯了一些愚蠢的错误:(。
答案 0 :(得分:1)
这很有效,但并不是所有的正则表达式都是:
var test = "some non interesting part\ntrans-top\nbody of first excerpt\ntrans-bottom\nnext non interesting part\ntrans-top\nbody of second excerpt\ntrans-bottom\nnon interesting part";
var matches = test.match(/(trans-top)([\s\S]*?)(trans-bottom)/gm);
for(var i=0; i<matches.length; i++) {
matches[i] = matches[i].replace(/^trans-top|trans-bottom$/gm, '');
}
console.log(matches);
如果您不想要前导和尾随换行符,请将内部循环更改为:
matches[i] = matches[i].replace(/^trans-top[\s\S]|[\s\S]trans-bottom$/gm, '');
应该吃掉线路。
答案 1 :(得分:1)
这个测试过的函数使用一个正则表达式并循环挑选每个匹配的内容,将它们全部放在一个返回的数组中:
function getParts(text) {
var a = [];
var re = /trans-top\s*([\S\s]*?)\s*trans-bottom/g;
var m = re.exec(text);
while (m != null) {
a.push(m[1]);
m = re.exec(text);
}
return a;
}
它还会过滤掉每个匹配内容周围的任何lealding和尾随空格。