Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8正则表达式不工作_Javascript_Regex_Internet Explorer 8 - Fatal编程技术网

Javascript 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

有人知道如何在IE8中实现这一点吗

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>        
    */})"
 /\/\*([^]*?)\*\/\}$/