IE8正则表达式不起作用

时间:2013-08-23 10:09:46

标签: javascript regex internet-explorer-8

有谁知道如何在IE8中完成这项工作?

var html = (function () {/*   <!DOCTYPE html>   <html>
    <body>
      <h1>Hello, world!</h1>
    </body>   </html>        
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];

Chrome会返回此信息(这是预期的答案)

 <!DOCTYPE html>
  <html>
    <body>
      <h1>Hello, world!</h1>
    </body>
  </html> 

但IE8不喜欢它,它返回

  '/' expected

我已经验证了IE8中的toString()部分,它包含

"(function () {/*   <!DOCTYPE html>   <html>
        <body>
          <h1>Hello, world!</h1>
        </body>   </html>        
    */})"

目标是提取注释中的内容,因此可以在javascript中使用多行字符串而不添加任何字符。 因此,如果有人提出另一个适用于IE8和Chrome的正则表达式,那就太棒了。

1 个答案:

答案 0 :(得分:0)

应用于函数的toString方法不一定完全按类型返回源代码。 MDN说“toString反编译函数,返回的字符串包括函数关键字,参数列表,花括号和函数体的来源”。它还表明这是非标准和过时的。 ECMAscript标准如下:

  

15.3.4.2 Function.prototype.toString()

     

返回函数的依赖于实现的表示。这个   表示具有FunctionDeclaration的语法。请特别注意   白色空间,行终止符和分号的使用和放置   表示字符串中的字符串是依赖于实现的。

     

toString函数不是通用的;它会抛出一个TypeError异常   此值不是Function对象。因此,它无法转移到    其他种类的物体用作方法。

我毫不犹豫地说所有JS实现都支持function.toString,但我知道没有。但是它们的实施方式不Chrome似乎返回包含评论的完整源代码,Firefox删除了评论。

我和你的想法一样,使用评论来传递信息,但是当我发现Firefox删除它时就放弃了它。

所有这一切,因为toString 返回注释字符串,RE必须存在问题。没有可用于测试的IE8我无法建议明确的修复,但您可以尝试以下方法:

 /\/\*([^]*?)\*\/\}$/

我在开始时删除了多余的[^] *并使捕获[^] *非贪婪。 您的原始版本和我更改的版本都可以在Chrome浏览器中使用。