10

我目前正试图弄清楚为什么 JSDT 会发布诸如“ JavaScript error on valid regex ”之类的错误。

当我在测试时,我意识到它适用于像这样的简单文件:

var a = {
    urlParseRE: /^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
    test: b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g, "")
};

并报告 jQuery.mobile-1.3.1.min.js 等复杂文件的错误。

我使用在线工具格式化了简化的 jQuery 脚本,然后删除了其中几乎所有的内容,以制作一个有助于复制问题的简单示例。当文件大小从大约 3000 行减少到 300 行时,一些新的验证错误会在上述原始错误之前发布。我以完全不同的问题结束了我的实验。验证错误发布在“,”上,如下例所示:

!function(){
    window.alert("passed 1");
}(),
function(){
    window.alert("passed 2");
}();
window.alert("passed 3");

我知道 JSDT 项目休眠了一段时间并且只支持ECMAScript v3,所以在我创建新问题之前,我想确保最后一个简单的 js 示例对于 ECMAScript 语言规范第 3 版是正确的。是否有任何在线或离线工具可以验证这一点?

4

2 回答 2

6

有点过时了,但https://jshint.com/指出了 ES3 和 ES5 问题

于 2020-04-06T21:48:31.297 回答
3

您可以为此使用Esprima 。

“用于多用途分析的 ECMAScript 解析基础架构”

如果您将最后一个块提供给 Esprima 的验证器,它会说“代码在语法上是有效的”。

Esprima 遵循 ES5,因此从技术上讲,它可以传递仅符合 ES3 的解析器无法理解的与 ES5 相关的语法。

但是在这种情况下我没有看到任何与 ES5 相关的东西,所以它一定是 JSDT 中的一个错误。

于 2013-09-21T11:49:07.180 回答