修复RegEx中的JSLint错误转义警告

时间:2011-10-12 05:39:59

标签: jquery regex escaping jslint

我在名为 jquery.facebox.js 的第三方jQuery控件中有以下代码: JSLint 不喜欢。这在RegEx中是一个糟糕的擒纵机构错误。

正则表达式对我来说就像Romulan,所以我看不出如何修复错误(这与RegEx中的句点字符有关):

var imageTypes = $.facebox.settings.imageTypes.join('|');
$.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i');

2 个答案:

答案 0 :(得分:9)

\之后添加第二个'\。这是一个字符串问题,而不是正则表达式问题: - )

要在Javascript(以及许多其他语言)中的字符串中使用\,您需要将其转义,因为它用于转义序列(如\n)。因此要设置\,您必须放置\\

在正则表达式\用于转义下一个字符,但这是另一个转义(未连接到“字符串”转义)。所以它是\\.

更清楚:你希望你的字符串“字面上”\.(something。为此,您需要通过添加另一个\来转义\(否则您的字符串将为.(,因为\会逃脱.,所以它不会做任何事情)。如果你很好奇,正则表达式中的.表示任何字符,但如果你想搜索.(一个点),你必须逃避它,猜猜你用的是什么? \: - )

如果有一天你必须用C#编程,在C#中你可以使用@"something"来解决这个问题。 @ disable在字符串中转义“扩展”。因此@"\"\

答案 1 :(得分:2)

如果使用/ /作为附件将模式定义为Regex对象,则不需要双重转义,因为它永远不是字符串。