【问题标题】:Remove all: whitespaces, \n, \t, backslashes from .innerHTML从 .innerHTML 中删除所有:空格、\n、\t、反斜杠
【发布时间】:2016-06-04 22:19:05
【问题描述】:

在序列化一些div 中的.innerHTML 之后,我得到了这样的代码(其中的一部分):

<div class=\"qa-main-wrapper\">\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"qa-main\">\n\t\t\t\t\t\t<h1>\n\t\t\t\t\t\t\t<a href=\"./feed/activity.rss\" original-title=\"Ostatnia aktywność\" title=\"\"><i class=\"icon-rss qam-title-rss\"></i></a>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tOstatnia aktywność\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<div class=\"qa-widgets-main qa-widgets-main-high\">\n\t\t\t\t\t\t\t<div class=\"qa-widget-main qa-widget-main-high\">\n<div style=\" text-align:center; background-color: white; width:100%; padding-top:6px; margin-bottom:5px;\">\n\t<script type=\"text/javascript\">\n\tgoogle_ad_client = 'pub-4644487134112796';\n\tgoogle_ad_width = 728;\n\tgoogle_ad_height = 90;\n\tgoogle_ad_format = '728x90_as';\n\tgoogle_ad_type = \"text_image\";\n\tgoogle_ad_channel = \"\";\n\t</script>\n\t<script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>\n</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<div class=\"qa-part-q-list\">\n\t\t\t\t\t\t\t<form method=\"post\" action=\"./activity\">\n\t\t\t\t\t\t\t\t<div class=\"qa-q-list\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"qa-q-list-item\" id=\"q147574\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"qa-q-item-stats\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"qa-voting qa-voting-net\" id=\"voting_147574\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"qa-vote-buttons qa-vote-buttons-net\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<input name=\"vote_147574_1_q147574\" onclick=\"return qa_vote_click(this);\" type=\"submit\" value=\"+\" class=\"qa-vote-first-button qa-vote-up-button\" original-title=\"Kliknij, aby oddać głos w górę\" title=\"\"> \n\t\t\t\t\t\t\t\t\t\t\t\t\t<input name=\"vote_147574_-1_q147574\" onclick=\"return qa_vote_click(this);\" type=\"submit\" value=\"–\" class=\"qa-vote-second-button qa-vote-down-button\" original-title=\"Kliknij, aby oddać głos w dół\" title=\"\"> \n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t

我要全部删除:

  • 不必要的空格
  • \n
  • \t
  • \n\t 对和重复(类似于上面两个)
  • 反斜杠,如 (\),在双引号 (") 之前。那么,我想要的不是 \" "

我试过这样的regex[\\][\\n][\\t][\\n\\t]+

,在此:var cleared = document.querySelector('.qa-body-wrapper').innerHTML.replace(new RegExp('[\\n][\\t][\\n\\t]+'), '');

,但它并不匹配我上面列出的所有字符。另外,我不知道如何将那些反斜杠(在双引号之前)与相同的正则表达式匹配。

我的正则表达式对我想要实现的目标有好处还是完全错误?

[编辑]

这个问题可以结束了。我用每个 div 的数据(包括它的内容)分离了对象,并通过 JSON 发送它——它非常干净,数据更少(只有必要的东西)。

感谢您的regex 提案。

【问题讨论】:

  • 您的代码中出现这种混乱的原因是什么?
  • 你如何“序列化”HTML,如果所有的换行符和制表符都是字符串的一部分,你似乎做错了什么。
  • 这是我想出的:regex101.com/r/lF6vA3/1
  • 所有空格的正则表达式 [\s]+/g,谢谢
  • 为什么是innerHTML?请改用textContent || innerText - 空格将为您折叠...

标签: javascript regex innerhtml


【解决方案1】:

用途:

new RegExp(/(\\)"|(\\n)|(\\t)|>[^<]*(\s)[^>]*</, 'g')

这会删除您列出的所有内容。我假设“不必要的空格”是指 html 元素标签之外的空格。

【讨论】:

  • 这不会删除引号以及它之前的反斜杠吗?
  • 也不需要new RegExp(...)只需使用var regex = /.../g
  • @andlrc 不,它不会。报价在捕获组之外。另外,是的,我会这样做,但显然不是 OP 想要这样做的方式。
  • 这是一个反问句。它会删除引号。
  • @JBux,谢谢,您的正则表达式有效,但它似乎没有删除那些反斜杠。为什么还要删除双引号?它们是 HTML 标签属性的一部分。
【解决方案2】:

这样的替换可能会起作用:

str.replace(/\\t|\\n|\\(?=")/g, '');

以上将删除双引号前的文字\n\t\,例如:

'hello\\nworld\\tJohn\\"Doe' -> 'helloworldJohn"Doe'

我对@9​​87654326@ 使用了积极的前瞻性:\\(?=")

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 2013-04-16
    • 1970-01-01
    • 2011-05-13
    • 2014-10-07
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多