JavaScript/Regex -用p标记替换换行符\n用带 Package 的br标记替换双换行符

nvbavucw  于 2023-10-22  发布在  Java
关注(0)|答案(3)|浏览(114)

我完全不知道怎么写这个正则表达式。基本上,我需要在这里用一个<p></p>标记 Package 每一行,用一个<p><br /></p> Package 每一个双新行。假设我有以下字符串:

Hello World\n\nFoo Bar\nBas Baz

我需要写一个输出,将其格式化为以下格式:

<p>Hello World</p>
<p><br /></p>
<p>Foo Bar</p>
<p>Bas Baz</p>

现在我只有这个但这个不管用它不使用<p>标记 Package 单行

function textToHtml(text) {
  text = text.replace(/\n\n/g, '<p><br /></p>');
  return text;
}
--- 
textToHtml('Hello World\n\nFoo Bar\nBas Baz') 
// 'Hello World<p><br /></p>Foo Bar\nBas Baz'

如果你能在正确的方向上做出任何努力,

lxkprmvk

lxkprmvk1#

function textToHtml(text) {
  const paragraphs = text.split('\n');
  const formattedText = paragraphs.map((paragraph) => {
    if (paragraph === '') {
      return '<p><br /></p>';
    } else {
      return `<p>${paragraph}</p>`;
    }
  }).join('');
  return formattedText;
}
var res=textToHtml('Hello World\n\nFoo Bar\nBas Baz');
console.log(res);
 ------
Output:

<p>Hello World</p><p><br /></p><p>Foo Bar</p><p>Bas Baz</p>
inn6fuwd

inn6fuwd2#

你不需要使用regex:

const test = 'Hello World\n\nFoo Bar\nBas Baz';

const toHtmlP = (str) => test.split('\n').map(p => '<p>'+(p.length ? p : '<br />')+'</p>').join('');

console.log(toHtmlP(test));

此外,正如你在jsperf benchmark上看到的,没有regex的版本更快:

sc4hvdpw

sc4hvdpw3#

以下只是一个“轻推”,本身并不完整。它不会替换文本中的换行符,而只是展示了如何使用.+来匹配一个或多个非换行符来换行。

text = text.replace(/.+/g, '<p>$&</p>');

替换字符串中的$&表示整个匹配。
无论如何,我推荐Sandeep Singh的方法。
完整的解决方案:

function textToHtml(text) {
  return text
    .replace(/.+/g, '<p>$&</p>')
    .replace(/(?<=\n|^)(?=\n|$)/g, '<p><br /></p>');
}

console.log(textToHtml('Hello World\n\nFoo Bar\nBas Baz'));

相关问题