Javascript IE8正则表达式不工作
有人知道如何在IE8中实现这一点吗Javascript IE8正则表达式不工作,javascript,regex,internet-explorer-8,Javascript,Regex,Internet Explorer 8,有人知道如何在IE8中实现这一点吗 var html = (function () {/* <!DOCTYPE html> <html> <body> <h1>Hello, world!</h1> </body> </html> */}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; 我已经在IE8中验证了to
var html = (function () {/* <!DOCTYPE html> <html>
<body>
<h1>Hello, world!</h1>
</body> </html>
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
我已经在IE8中验证了toString部分,它包含
"(function () {/* <!DOCTYPE html> <html>
<body>
<h1>Hello, world!</h1>
</body> </html>
*/})"
目标是提取注释中的内容,因此可以在javascript中使用多行字符串,而无需添加任何字符。
因此,如果有人提出了另一个在IE8和Chrome中工作的正则表达式,那就太好了。应用于函数的toString方法不一定会返回与键入完全相同的源代码。表示toString反编译函数,返回的字符串包括函数关键字、参数列表、大括号和函数体的源。它还表明这是非标准和过时的。ECMAscript标准有以下内容:
15.3.4.2 Function.prototype.toString
返回函数的依赖于实现的表示形式。这
表示具有FunctionDeclaration的语法。特别注意
空白、行终止符和分号的使用和放置
表示中的字符串取决于实现
toString函数不是泛型函数;如果其
此值不是函数对象。因此,它不能转移到
用作方法的其他类型的对象
我不想说所有的JS实现都支持function.toString,但我知道没有一个不支持function.toString。然而,它们的执行情况各不相同。Chrome似乎会返回包括注释在内的完整源代码,Firefox会删除注释
我和你的想法一样,使用评论来传递信息,但当我发现Firefox删除了它们时,我放弃了这个想法
综上所述,由于toString返回的是注释字符串,因此RE肯定有问题。没有IE8可用于测试我无法建议最终的修复方案,但您可以尝试以下方法:
/\/\*([^]*?)\*\/\}$/
我一开始就删除了多余的[^]*并使捕获[^]*不贪婪。
在我的Chrome浏览器中,您的原始版本和我的更改版本都可以工作 你在IE 8中遇到了什么问题。制作一个人们可以看到的演示总是很好的。这样你会更快更容易地得到答案。这在Chrome中是如何工作的?是的。您的预期输出是什么,实际输出是什么?您是否尝试删除regex部分?可能是.toString失败了。Safari说TypeError:“null”不是靠近“…*\/\*[^]*\*\/\}$/[1];…”的对象。>>source.match/\/*[^]*?*\/\}$/']'应为正则表达式。嗯,Chrome对此没有问题。尝试将[^]替换为[.\n\r]source.match/\/*[.\n\r]*?*\/\}$/=>nulls因为我们似乎正在取得一些进展,请尝试/\/*[^q]*?*/\/\}$/示例中没有q。var html=函数{/*你好,世界!/.toString.match/\/*[^q]?*/\}$/
"(function () {/* <!DOCTYPE html> <html>
<body>
<h1>Hello, world!</h1>
</body> </html>
*/})"
/\/\*([^]*?)\*\/\}$/