正则表达式在Javascript中匹配所有直到空行
我试图完成的是匹配文件中的所有文本和空行,直到找到一个完全空行。文本本身如下所示: 实质性的=== 我的名字是哈纳·索姆·吉克·比奥,他是一名国际知名人士。 艾尔茨维斯特酒店。 Faständåvar det ganska roligt för henne ==安娜== 小跑动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作 <> >我想匹配的是从“=======”到“==ANNAT==”的空行。由于碰巧有更多的三个等号的行,我也希望代码可以很容易地改成另一个单词,而不是“===Substantiv==” 到目前为止,我使用regex尝试的是:正则表达式在Javascript中匹配所有直到空行,javascript,regex,Javascript,Regex,我试图完成的是匹配文件中的所有文本和空行,直到找到一个完全空行。文本本身如下所示: 实质性的=== 我的名字是哈纳·索姆·吉克·比奥,他是一名国际知名人士。 艾尔茨维斯特酒店。 Faständåvar det ganska roligt för henne ==安娜== 小跑动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作动作
===Adjektiv(.|\n)+
但是,正如你可能从它的结构中可以看出的那样,没有绝对的方法在找到一个空行时结束它,因为这将永远持续到我想匹配的文本的最后
致以最诚挚的问候,您可以使用
/===Substantiv===(.*(?:\r?\n(?!\r?\n).*)*)/g
^^^^^^^^^^^^^^^^^^^^^^^^
请参见,您的值位于组1内。找到匹配项后,您可以修剪它
*(?:\r?\n(?!\r?\n.*)
部件将除换行符(*
)以外的任何零个或多个字符捕获到组1中,然后将换行符序列(\r\n
或\n
-请参阅\r?\n
)的零次或多次出现(由于换行符序列()*
)(请参见负前瞻(?!\r?\n)
)以及除换行符号以外的任何0+字符
请注意,它是的展开变体
/===Substantiv===([\s\S]*?)(?=(?:\r?\n){2}|$)/g
这比上面的模式慢,但看起来可读性更强。请参见。在这里,([\s\s]*?)
捕获的0+字符尽可能少,直到第一个双线中断((?:\r?\n){2}
)或字符串结尾($
)
如果您所说的空行是指可能包含制表符、空格等的行,则可以使用
/===Substantiv===(.*(?:\r?\n(?!\s*\r?\n).*)*)/g
^^^
或
看
JS演示:
var regex=/==Substantiv==(.*(?:\r?\n(?!\s*\r?\n)。*)*)/g;
var str=“=======实体==\n在法律上的风险,快速确定内部风险。所有内部风险。\n快速确定内部风险。\n快速确定内部风险。\n;
var res=[],m;
while((m=regex.exec(str))!==null){
res.push(m[1].trim());
}
控制台日志(res);
//除了上面的匹配项之外,其他的都有了
var regex=/==Substantiv==.*(:\r?\n(?!\s*\r?\n.*)*/;
log(str.split(regex).filter(Boolean));
我建议简单地用空行分割(/^$/igm
)
如果文本块中可能出现空行,则此方法将不适用
//加载字符串
var str=“======实体==\n文件中的文件,快速确定文件的内容。\n所有文件的内容。\n最后确定文件的内容。\n\n==Annat=\n;
//按空行分割
var str=str.split(/^$/igm);
//可选修剪
str=str.map(函数(a){
返回a.toString().trim();
})
//日志结果
对于(变量i=0;i }
你所说的“空行”和“完全空行”是什么意思?有什么区别?我想知道用两行新行拆分是否适合你,比如:str.split('\n\n')
避免使用正则表达式。请永远不要使用(.|\n)+
-这是一种效率极低的模式。此外,在JS中,
与\r
不匹配。请使用[\s\s]
或[^]
匹配任何字符,包括换行符。除了您选择得非常好的字符外,如何选择所有字符?使用空字符串替换这些regexp。或者拆分并删除空元素。但是如果您要使用拆分,则需要删除捕获组。我添加了一些JS代码来演示如何使用匹配和split.是否可以使用类似正则表达式“not”的东西?也许可以通过某种方式使用“^”。^
不仅仅意味着不。它只意味着不在字符类中。[^aeu]
匹配除a
、e
、u
和[^not]之外的所有单个字符
匹配5
,和
-除n
,o
,t
以外的所有字符。使用拆分。除了正则表达式之外,没有其他方法匹配所有字符?
/===Substantiv===(.*(?:\r?\n(?![^\S\r\n]*\r?\n).*)*)/g
^^^^^^^^^^