使用JS正则表达式从HTML中去除JS

5
我正在使用jQuery对一列电子邮件进行排序,尽管它们在js中是base64编码的...所以我需要一个正则表达式命令来忽略<script>.*?<script>标签,并只对它们之后的内容进行排序(在<noscript>标签内)。 列HTML
<td>
  <script type="text/javascript">
      document.write(Base64.decode('PG5vYnI+PGEgaHJlZj0ibWFpbHRvOmJpY2VAdWNzYy5lZHUiIHRpdGxlPSJiaWNlQHVjc2MuZWR1Ij5iaWNlPC9hPjwvbm9icj48YnIgLz4K'));
  </script>
  <noscript>username</noscript>
</td>

需要改善的正则表达式

a.replace(/<script.*?<\/script>(.*?)/i,"$1");

所有的电子邮件都位于<noscript></noscript>中,还是每个电子邮件条目都重复使用<td></td> - tftd
如果每个电子邮件都在noscript块中,为什么不只是对jQuery("noscript").text()进行排序呢? - slashnick
2个回答

2
假设html的结构不变,您可以使用以下代码:
$(a)​.contents().filter(function(){
    return this.nodeType === 3
}).eq(1).text();

它获取所有文本节点,然后过滤到索引为1的节点并获取其文本值。

如果您想继续使用正则表达式,可以使用以下表达式:

a.replace(/(<script type="text\/javascript">[^>]+>|<noscript>.*<\/noscript>)/ig,"");

0

我知道这不完全是你要求的(虽然说实话我有点困惑你到底在问什么...),但你考虑过使用 document.getElementsByTagName('noscript') 吗?这个函数应该会返回一个数组,其中第一个元素将是你的 noscript 元素。

另外,我对你解决这个问题的整体方法并不清楚,但似乎你误解了 noscript 元素的用途。只有当浏览器不支持 Javascript 时,noscript 元素才会执行,这意味着只有在你用来修改 noscript 内容的 Javascript 无法运行时,noscript 内容才会显示给用户。

也许你可以澄清一下你到底想做什么?


当元素中存在 noscript 时,它仍然是该元素的子元素,并且无论 JavaScript 是否存在,它仍然可选。唯一的区别是如果启用了 JavaScript,则会被隐藏。获取 tdtextContent 仍将返回 script 标签和 noscript 标签。 - Kevin B
好的,我想我误解了他的问题,他想使用JavaScript修改noscript标签中的内容,以便向用户显示,但这可能是我的误解。 - JacobEvelyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接