正则表达式用双换行符分隔段落

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>

【讨论】:

这会逐字逐句分解 :)) 这很有趣,但并不完全需要,因为“文本”只是示例,但段落通常很长。

以上是关于正则表达式用双换行符分隔段落的主要内容,如果未能解决你的问题,请参考以下文章

js用正则把换行br替换为段落p

使用正则表达式获取用换行符分隔的单词之间的文本

使用正则表达式在 Visual Studio 中选择由双换行符分隔的文本块

正则表达式来检测用换行符分隔的日期

正则表达式 换行符

ruby Amazon ASIN正则表达式和Ruby用于从逗号分隔或换行符分隔的textarea中提取asins