正则表达式匹配所有直到空白行Javascript

时间:2016-11-28 09:43:16

标签: javascript regex

我想要完成的是匹配文件中的所有文本和空行,直到找到完全空行。文本本身看起来像这样:

  

=== Substantiv ===

     

Det varengångenlitenhönasomgickpåbio,fast det visste honinteförst。   Alltsåvisstehon inte。   Faständåvardet ganskaroligtförinnne。

     

== Annat ==

     

Trots att det var roligt var det inte det。

我想要匹配的是从“=== Substantiv ===”到“== Annat ==”上方的空行。由于碰巧有更多的行有三个等号,我还希望代码有点容易改为另一个词,而不是“=== Substantiv ===”。

到目前为止,我使用正则表达式尝试的是:

===Adjektiv(.|\n)+

但是你可以从结构中看出,在找到一个空行时没有绝对的方法来结束它,因为这将永远持续到我希望匹配的文本的最后。

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:2)

我建议只用空行(dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); )分割。

如果文本块中出现空行,则此方法不会很好。

/^$/igm

如果您只需要包含//Load string var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n==Annat==\nTrots att det var roligt var det inte det."; //Split by empty line var str = str.split(/^$/igm); //Optional trimming str = str.map(function(a) { return a.toString().trim(); }) //Log results for (var i = 0; i < str.length; i++) { console.log(str[i]); }的字符串:

===Substantiv===

答案 1 :(得分:1)

您可以使用

/===Substantiv===(.*(?:\r?\n(?!\r?\n).*)*)/g
                 ^^^^^^^^^^^^^^^^^^^^^^^^

请参阅regex demo,您的值在第1组内。您可以在找到匹配项后修剪它。

.*(?:\r?\n(?!\r?\n).*)*部分将换行符(.*)以外的任何零个或多个字符捕获到第1组中,然后出现零次或多次出现(由于(?:...)*)换行符序列(\r\n\n - 请参阅\r?\n)未跟随另一个换行符序列(请参阅否定前瞻(?!\r?\n)),然后是除行之外的任何0+字符打破符号。

请注意,它是

的展开式变体
/===Substantiv===([\s\S]*?)(?=(?:\r?\n){2}|$)/g

比上面的模式慢,但看起来更具可读性。请参阅regex demo。在这里,([\s\S]*?)在第一个双重换行符((?:\r?\n){2})或字符串结尾($)之前尽可能少地捕获任何0+个字符。

如果通过空白行,则表示可能包含制表符,空格等的行,您可以使用

/===Substantiv===(.*(?:\r?\n(?!\s*\r?\n).*)*)/g
                               ^^^

/===Substantiv===(.*(?:\r?\n(?![^\S\r\n]*\r?\n).*)*)/g
                               ^^^^^^^^^^

请参阅another demo

JS演示:

var regex = /===Substantiv===(.*(?:\r?\n(?!\s*\r?\n).*)*)/g;
var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n  \n==Annat==\nTrots att det var roligt var det inte det.";
var res = [], m;
while ((m = regex.exec(str)) !== null) {
   res.push(m[1].trim());
}
console.log(res);
// Getting all but the matches above
var regex = /===Substantiv===.*(?:\r?\n(?!\s*\r?\n).*)*/;
console.log(str.split(regex).filter(Boolean));

获取所有Substantiv个子字符串的另一个想法:使用换行符拆分并过滤匹配

var regex = /\r?\n\s*\r?\n/;
var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n  \n==Annat==\nTrots att det var roligt var det inte det.\n\n===Substantiv===\nAnother substantive";
var res = str.split(regex).filter(function (m) {return m.startsWith("===Substantiv===");}).map(function (x) {return x.substr(16).trim();});
console.log(res);