为什么要将此p标记添加为新行

Why is this p tag being added as a new line?

本文关键字:添加 新行 为什么      更新时间:2023-09-26

以下代码拆分data,应用正则表达式,然后再次连接字符串(有一部分删除单词之间的新行,因为我希望段落在单个块/行中输出):

输入:

Lorem ipsum悲哀坐amet

Ipsum dolor sit amet,consetetur eirmod tempor invdunt ut labore

代码:

data = data.split(''n'n')
for (var i = 0; i < data.length; ++i) {
  data[i] = '<p>' + data[i].replace(/'n(?='w+)/g, ' ') + '</p>'
}
data = data.join(''n'n')

我以为输入是:

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

但不是,而是:

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

原因可能是什么?

我认为您的原始字符串中有一个尾随的换行符,但您可以通过一点更改来解决这个问题。与其检查换行后是否有单词字符,不如检查后是否没有空白字符

var data = "Lorem ipsum dolor sit amet'n"
         + "'n"
         + "Ipsum dolor sit amet, consetetur'n"
         + "eirmod tempor invidunt ut labore'n";
var data = data.split(''n'n');
for (var i = 0; i < data.length; ++i) {
  data[i] = '<p>' + data[i].replace(/'n(?!'s)/g, '') + '</p>'
}
data = data.join(''n'n');
console.log(data);

如果您的输出在关闭</p>标记之前显示了一条换行符,那么您的真实世界输入必须在末尾包含一条换行。以下代码对我来说很好:

/* note that you cannot declare a multiline string in javascript
   like you did. I'm using `Array.join()` to create the example data */
data = [
  "Lorem ipsum dolor sit amet",
  "",
  "Ipsum dolor sit amet, consetetur",
  "eirmod tempor invidunt ut labore"
].join("'n");
data = data.split(''n'n')
for (var i = 0; i < data.length; ++i) {
  data[i] = '<p>' + data[i].replace(/'n(?='w+)/g, ' ') + '</p>'
}
data = data.join(''n'n')