以下代码拆分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>
可能是什么原因?
答案 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);