正则表达式使用js从html中剥离js

时间:2012-02-27 18:58:16

标签: javascript jquery regex

我正在使用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");

2 个答案:

答案 0 :(得分:2)

假设html的结构没有改变,你可以使用:

$(a)​.contents().filter(function(){
    return this.nodeType === 3
}).eq(1).text();

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

如果你想坚持使用正则表达式,那么这就是:

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

答案 1 :(得分:0)

我知道这不是你所要求的(虽然我有点困惑你要求的,说实话......),但是你看过使用document.getElementsByTagName('noscript') ?此函数应返回一个数组,其第一个元素将是您的noscript元素。

另外,我对你解决这个问题的整体方法并不十分清楚,但似乎你误解了noscript元素的目的。 noscript个元素仅在浏览器不支持Javascript时执行,这意味着向用户显示的唯一noscript个内容是当您用于修改noscript的Javascript时内容不会运行。

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