使用 JavaScript 剥离标签并处理换行符

发布于 2024-11-26 12:45:48 字数 492 浏览 2 评论 0原文

我想从 html 中删除标签,但保留它的换行符。

我想要像在浏览器中复制文本并将其粘贴到记事本中这样的行为。

例如,将

  • x1
    x2
    转换为 x1\nx2
  • 的代码;x1

    x2

    x1\nx2
  • x1x2x1x2
  • x1
    x2
    x1\nx2

删除所有标签不起作用 (/<.*?>/g)。 还创建一个虚拟

并设置它的 innertHTML 并读取它的 textContent 将删除换行符。

有帮助吗?

I want to strip tags from a html, but preserves it's line breaks.

I want the behaviour like copying the text in browser and pasting it in notepad.

For example, a code that converts:

  • <div>x1</div><div>x2</div> to x1\nx2
  • <p>x1</p><p>x2</p> to x1\nx2
  • <b>x1</b><i>x2</i> to x1x2
  • x1<br>x2 to x1\nx2

Removing all tags not works (/<.*?>/g).
Also creating a dummy <div> and settings it's innertHTML and read it's textContent will remove line breaks.

Any Help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如梦亦如幻 2024-12-03 12:45:48

这对你来说怎么样?这会将出现的所有

替换为 \ n,然后剥离剩余的标签。虽然很愚蠢,但至少是一个开始。

fixed = text_to_fix.replace(/<(?:br|\/div|\/p)>/g, "\n")
           .replace(/<.*?>/g, "");

然而,这并不适用于所有 HTML。只是你提到的标签。

How's this work for you? This will replace every occurrence of <br>, </div>, and </p> with a \n, and then strip the remaining tags. Its goofy, but its at least a start.

fixed = text_to_fix.replace(/<(?:br|\/div|\/p)>/g, "\n")
           .replace(/<.*?>/g, "");

This doesn't work for all HTML, however. Just the tags you mentioned.

萧瑟寒风 2024-12-03 12:45:48

尝试:

function strip_tags(str){
    return str
             .replace(/(<(br[^>]*)>)/ig, '\n')
             .replace(/(<([^>]+)>)/ig,'');
}

var str = '<div>x1</div><div>x2</div><br>'+'<p>x1</p><p>x2</p>'+'<b>x1</b><i>x2</i>';

这将剥离标签并用新行替换

,但是为块元素添加新行需要相当长的时间想出一个解决办法。

这是一个演示

Try:

function strip_tags(str){
    return str
             .replace(/(<(br[^>]*)>)/ig, '\n')
             .replace(/(<([^>]+)>)/ig,'');
}

var str = '<div>x1</div><div>x2</div><br>'+'<p>x1</p><p>x2</p>'+'<b>x1</b><i>x2</i>';

This will strip the tags and replace <br /> or <br> with new lines, but adding new lines for block elements requires quite some time to come up with a solution.

Here is a demo

暮倦 2024-12-03 12:45:48

这是我在感到无聊之前所得到的……

const strip_tags = (html) => {
    let tmp = document.createElement("div");
    tmp.innerHTML = html
        .replace(/(<(br[^>]*)>)/ig, '\n')
        .replace(/(<(p[^>]*)>)/ig, '\n')
        .replace(/(<(div[^>]*)>)/ig, '\n')
        .replace(/(<(h[1-6][^>]*)>)/ig, '\n')
        .replace(/(<(li[^>]*)>)/ig, '\n')
        .replace(/(<(ul[^>]*)>)/ig, '\n')
        .replace(/(<(ol[^>]*)>)/ig, '\n')
        .replace(/(<(blockquote[^>]*)>)/ig, '\n')
        .replace(/(<(pre[^>]*)>)/ig, '\n')
        .replace(/(<(hr[^>]*)>)/ig, '\n')
        .replace(/(<(table[^>]*)>)/ig, '\n')
        .replace(/(<(tr[^>]*)>)/ig, '\n')
        .replace(/(<(td[^>]*)>)/ig, '\n')
        .replace(/(<(th[^>]*)>)/ig, '\n')
        .replace(/(<(caption[^>]*)>)/ig, '\n')
        .replace(/(<(dl[^>]*)>)/ig, '\n')
        .replace(/(<(dt[^>]*)>)/ig, '\n')
        .replace(/(<(dd[^>]*)>)/ig, '\n')
        .replace(/(<(address[^>]*)>)/ig, '\n')
        .replace(/(<(section[^>]*)>)/ig, '\n')
        .replace(/(<(article[^>]*)>)/ig, '\n')
        .replace(/(<(aside[^>]*)>)/ig, '\n');
    return tmp.textContent || tmp.innerText || "";
}

This is as far as I got before I got bored...

const strip_tags = (html) => {
    let tmp = document.createElement("div");
    tmp.innerHTML = html
        .replace(/(<(br[^>]*)>)/ig, '\n')
        .replace(/(<(p[^>]*)>)/ig, '\n')
        .replace(/(<(div[^>]*)>)/ig, '\n')
        .replace(/(<(h[1-6][^>]*)>)/ig, '\n')
        .replace(/(<(li[^>]*)>)/ig, '\n')
        .replace(/(<(ul[^>]*)>)/ig, '\n')
        .replace(/(<(ol[^>]*)>)/ig, '\n')
        .replace(/(<(blockquote[^>]*)>)/ig, '\n')
        .replace(/(<(pre[^>]*)>)/ig, '\n')
        .replace(/(<(hr[^>]*)>)/ig, '\n')
        .replace(/(<(table[^>]*)>)/ig, '\n')
        .replace(/(<(tr[^>]*)>)/ig, '\n')
        .replace(/(<(td[^>]*)>)/ig, '\n')
        .replace(/(<(th[^>]*)>)/ig, '\n')
        .replace(/(<(caption[^>]*)>)/ig, '\n')
        .replace(/(<(dl[^>]*)>)/ig, '\n')
        .replace(/(<(dt[^>]*)>)/ig, '\n')
        .replace(/(<(dd[^>]*)>)/ig, '\n')
        .replace(/(<(address[^>]*)>)/ig, '\n')
        .replace(/(<(section[^>]*)>)/ig, '\n')
        .replace(/(<(article[^>]*)>)/ig, '\n')
        .replace(/(<(aside[^>]*)>)/ig, '\n');
    return tmp.textContent || tmp.innerText || "";
}
美人如玉 2024-12-03 12:45:48

现在,您可以使用此函数,

function stripTags(html) {
     return html.replace(/<[^>]+>/g, '').replace(/<\/[^>]+>/g, '\n').replace(/<br>/g, '\n');
}

该函数会将所有开始和结束标记替换为空,并将
标记替换为换行符。这应该会给你想要的输出。

You can use this

function stripTags(html) {
     return html.replace(/<[^>]+>/g, '').replace(/<\/[^>]+>/g, '\n').replace(/<br>/g, '\n');
}

Now the function will replace all opening and closing tags with nothing, and <br> tags with line breaks. This should give you the desired output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文