JSLint - 带有变量的正则表达式的错误转义

Posted

技术标签:

【中文标题】JSLint - 带有变量的正则表达式的错误转义【英文标题】:JSLint - Bad Escaping for a Regex with variables 【发布时间】:2013-01-15 04:06:52 【问题描述】:

我看过一些关于 JSLint "bad escapement" 警告的帖子,但我只是想看看我是否正确地执行了这个正则表达式。 (注意 - 我是涉猎程序员)。

我有一个函数(如下),它试图从长消息中的名称中解析出一个变量。正则表达式运行良好,但我应该更改一些内容以响应 JSLint 警告吗?

一个非常简化的 msg 版本本质上可能如下所示:

变量名 1 = 值 1 变量名 2 = 值 2 变量名3 = 值3

实际的msg上下有不同的非结构化数据。我不得不使用一个奇怪的正则表达式,因为即使一个更简单的正则表达式适用于所有测试网站,它在我们正在使用的服务器应用程序中不起作用,所以这是我让它工作的唯一方法。正则表达式包含一个变量。

这是我正在使用的解析函数:

    function parseValue(msg, strValueName) 
        var myRegexp = new RegExp(strValueName + ' = ([A-Z3][a-zA-Z\. 3]+)[\\n\\r]+', 'gm');
        log('parseValue', 'myRegexp = ' + myRegexp.toString());
        var match = myRegexp.exec(msg);
        log('parseValue', 'returning match = ' + match[1] );
        return match[1];
    

“真正的”程序员可能很容易想出一些更简单的东西。任何帮助将不胜感激。

谢谢。

【问题讨论】:

我不知道您所说的bad escapements 是什么意思,但您不需要\.,只需. 就可以在字符类中使用。也许你可以试试。 我不确定这个警告。但是,请注意strValueName 可能包含在正则表达式中具有特殊含义的字符,这会弄乱生成的正则表达式。 关于可能具有正则表达式字符的变量的要点。我在受控实现和单个项目中使用它,但我可能应该通过转义所有特殊字符来使其更健壮。 我也会尝试从字符类中删除转义字符。谢谢。 Explosion Pills - 是的,这就是 JSLint 警告我的问题。再次感谢。 【参考方案1】:

JSLint 不喜欢的问题是 '.' 'Explosion Pills' 指出的字符类中的字符。

当我删除“。”时一切都很好。

谢谢。

【讨论】:

以上是关于JSLint - 带有变量的正则表达式的错误转义的主要内容,如果未能解决你的问题,请参考以下文章

JSLint“禁止正则表达式中的不安全”选项的目的

正则表达式中的 JSLint“不安全 ^”

json_encode() 转义正斜杠

Nginx rewrite 重写功能和Nginx的正则表达式

JSLINT 关于样式的警告或关于条件表达式的错误

JSLint 未使用的变量错误