Javascript 如何将新线作为一条线进行匹配?

Javascript 如何将新线作为一条线进行匹配?,javascript,regex,Javascript,Regex,我想把这个转变为: Lorem ipsum dolor sit amet Ipsum dolor sit amet, consetetur eirmod tempor invidunt ut labore 为此: <p>Lorem ipsum dolor sit amet</p> <p>Ipsum dolor sit amet, consetetur eirmod tempor invidunt ut labore</p> Lorem

我想把这个转变为:

Lorem ipsum dolor sit amet

Ipsum dolor sit amet, consetetur 
eirmod tempor invidunt ut labore 
为此:

<p>Lorem ipsum dolor sit amet</p>

<p>Ipsum dolor sit amet, consetetur 
eirmod tempor invidunt ut labore</p>
Lorem ipsum dolor sit amet

伊普苏姆·多洛·塞特 临时劳工局

为此,我将段落拆分,应用正则表达式,最后再次合并:

data = data.split('\n\n')
for (var i = 0; i < data.length; ++i) {
  data[i] = data[i].replace(/(.+)/g, '<p>$1</p>')
}
data = data.join("")
data=data.split('\n\n')
对于(变量i=0;i'))
}
data=data.join(“”)
不幸的是,结果是:

<p>Lorem ipsum dolor sit amet</p><p>Ipsum dolor sit amet, consetetur</p>
<p>eirmod tempor invidunt ut labore</p>
Lorem ipsum door sit amet

临时劳工局

该段的每一行都被视为一个单独的段落


如何修改代码以获得所需的结果?

您需要regexp吗?这也应该奏效

for (var i = 0; i < data.length; ++i) {
    data[i] = '<p>' + data[i]+ '</p>';
}
for(变量i=0;i';
}

我通常使用[\s\s]匹配任何字符,包括换行符,因此我的修改:

for (var i = 0; i < data.length; ++i) {
  data[i] = data[i].replace(/([\s\S]+)/g, '<p>$1</p>');
}
for(变量i=0;i');
}

使用正则表达式,您可以执行以下操作:

data = date.replace(/^(\S[\s\S]+?)(?=\n\n|$(?!\n))/gm, '<p>$1</p>');
data=date.replace(/^(\S[\S\S]+?)(?=\n\n |$(?!\n))/gm,$1

);

默认情况下,正则表达式按行运行。在您的
消费之后有一个
\n
,导致
(.+)
在那里停止匹配。尝试添加多行标志:
/(.+)/gm
。使用
数据。加入(“\n\n”)
@Marc B奇怪,我添加了
m
。仍然得到相同的结果。我不想包括新行。很好。和我一样使用
for
循环有什么好处吗?或者是同一件事?我相信这是更少的代码,更容易理解。就效率而言,我认为这两种方法或多或少是相同的。