为什么这个p标签被添加为新行?

时间:2015-03-19 11:55:40

标签: javascript html regex

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

输入:

  

Lorem ipsum dolor sit amet

     

Ipsum dolor sit amet,consetetur eirmod tempor invidunt 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>

可能是什么原因?

2 个答案:

答案 0 :(得分:1)

如果您的输出在结束</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')

答案 1 :(得分:1)

我认为你的原始字符串中有一个尾随换行符,但你可以通过一点改动解决问题。在换行符后检查是否有单词字符,而不是检查在以下字符后是否有空格字符:

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);