有谁知道如何在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的正则表达式,那就太棒了。
答案 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浏览器中使用。