这个正则表达式有什么问题?JSLint抛出错误
What's wrong with this regex? JSLint is throwing an error
我试图通过新的JSLint验证我的整个脚本,但是有了这个:
function a() {
'use strict';
var string;
string = string.replace(/'x00*/g, '');
}
它抛出:
string = string.replace(/'x00*/g, '');
旧版本不会抛出错误。我知道它还在测试阶段,但我希望它能和旧版本一样好用。顺便说一下,'x00
代表空字符。
那么,这是ECMAScript 6改变的东西吗?这只是一个JSLint bug吗?我真的做错了什么吗?
https://jslinterrors.com/a-regular-expression-literal-can-be-confused-with 所以你需要使用正则表达式字面量可能与'/='"当JSLint, JSHint(1.0.0版本之前)或ESLint遇到以=字符开头的正则表达式字面量时抛出错误。在下面的例子中,我们尝试分配一个正则表达式文字来匹配字符串"=1"到变量x:
此错误被抛出以突出显示可能令人困惑的代码段。如果您不修复这个错误,您的代码将运行良好,但它可能会让其他人感到困惑,特别是对于快速搜索您的脚本的人来说,第一眼就会感到困惑。
/字符在JavaScript中是不明确的。它既可以表示正则表达式字面量的开始或结束,就像上面的例子一样,也可以解释为除法运算符。与大多数算术操作符一样,除法操作符可以与赋值操作符组合使用,从而产生以下简写:
RegExp
构造函数:
string.replace(new RegExp('''x00*', 'g'), '');
输出与正则表达式字面量相同的正则表达式:
console.log(new RegExp('''x00*', 'g').toString() === /'x00*/g.toString()); // true
小费空字符'x00
可以缩短为'0
(MDN docs)
new RegExp('''0*', 'g')
,
更新@nhahtdh的答案显示您可以使用/'u0000*/g
literal
根据ECMAScript规范:
-
'x00
是有效的,语法扩展为:Atom -> ' AtomEscape AtomEscape -> CharacterEscape CharacterEscape -> HexEscapeSequence HexEscapeSequence -> x HexDigit HexDigit
和模式语义:
产品
CharacterEscape :: HexEscapeSequence
通过计算HexEscapeSequence
的CV(见7.8.4)并返回其字符结果来求值。 -
'0
总是被解释为匹配NUL字符,在DecimalEscape
的模式语义下:产品
DecimalEscape :: DecimalIntegerLiteral [lookahead ∉ DecimalDigit]
的计算如下:- 设
i
为DecimalIntegerLiteral
的MV - 如果
i
为零,则返回由<NUL>
字符(Unicode值0000)组成的EscapeValue
。 - 返回由整数
i
组成的EscapeValue
。
" The MV of
DecimalIntegerLiteral
"的定义见7.8.3.如果
'
后面跟一个第一位不为0的十进制数n
,则认为转义序列为backreference。如果n
大于整个正则中左捕获括号的总数,则会产生错误表达式。'0
表示<NUL>
字符,后面不能跟十进制数字 - 设
因此,我不确定为什么JSLint禁止这些结构。从一些测试来看,它们似乎没有在解析器中实现,因为像这样的简单代码:
var x = /(['"])'1/;
抛出"Unexpected '1' after '''."
错误。
如果你想让代码传递JSLint,你可以用'u0000
指定NUL字符。否则,可以忽略此错误。
- jslint-vim configuration
- javascript中的数组出错
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 在Meteor项目中安装并包含npm模块后出错
- 解析JSON并从中删除对象会出错
- AngularJS指令出错-无法读取属性'编译'的未定义
- 使用javascript在MVC中查找网格长度时出错
- 尝试调用AngularJS上的函数时出错
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 全局安装gull后出错
- 我在代码点火器中出错
- Java脚本将URL转换为已保存的URL时出错
- Backbone.js将模型绑定到视图时出错
- 将javascript代码转换为jquery代码时出错
- 加载db.json时出错
- 在运行时创建元素时移到一边时出错
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 你能把grunt.js中的linter改成jslint吗
- 重置表单字段时出错
- 将对象的列表c#传递给javascript:undefined变量时出错