正则表达式用双换行符分隔段落
Posted
技术标签:
【中文标题】正则表达式用双换行符分隔段落【英文标题】:regex to separate paragraphs by double new line 【发布时间】:2021-05-27 08:45:46 【问题描述】:为作者在 textarea 中添加/删除空行做一个小助手。删除多余行的那个似乎有效:
if(jQuery("#remove_line").prop("checked"))
conver = conver.replace(/^\s*[\r\n]/gm,'');
但是必须有一个反向的,使任何新行变成双新行(无论一行中只有 1 个或什至 3 个新行)。例如。这个:
text
text
text
text
应该处理成这样:
text
text
text
text
有人可以帮忙吗?提前致谢!
【问题讨论】:
【参考方案1】:您可以匹配一个或多个换行符 [\r\n]+
并替换为 2 个换行符 \n\n
const regex = /[\r\n]+/gm;
const str = `text
text
text
text`;
console.log(str.replace(/[\r\n]+/g, `\n\n`));
【讨论】:
【参考方案2】:没有测试,但我认为这可以工作:replace(/[\n]+?/g,'\n\n')
\n+ 将匹配 1 个或多个新行,问号将强制取最短的数量(这将在第一个非新行字符处停止匹配块)
【讨论】:
很好,这似乎有效!甚至不确定哪个更通用,这个或下面建议的那个,但任何一个都可以。谢谢! :) 你测试过模式吗?为什么让它不贪心[\n]+?
?【参考方案3】:
反过来?
addEventListener('load', ()=>
const ta = document.querySelector('textarea');
function doubleSpaceAfter(fullText, text, insensitive = true)
const s = insensitive ? 'i' : '';
return fullText.replace(new RegExp('('+text+')\\s+', 'g'+s), '\n\n$1\n\n');
ta.value = doubleSpaceAfter(ta.value, 'text here');
); // end load
<textarea>other stuff text here is this what you want? text here text here</textarea>
【讨论】:
这会逐字逐句分解 :)) 这很有趣,但并不完全需要,因为“文本”只是示例,但段落通常很长。以上是关于正则表达式用双换行符分隔段落的主要内容,如果未能解决你的问题,请参考以下文章