在RegEx中修复JSLint错误的转义警告
我在JSLint不喜欢的名为jquery.facebox.js的第三方jQuery控件中有以下代码。 这在RegEx中是一个糟糕的擒纵错误。
正则表达式对我来说就像Romulan,所以我看不出如何修复错误(这与RegEx中的句点字符有关):
var imageTypes = $.facebox.settings.imageTypes.join('|'); $.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i');
在'\
之后添加第二个'\
。 这是一个字符串问题,而不是正则表达式问题:-)
要在Javascript(以及许多其他语言)中使用字符串,您需要将其转义,因为它用于转义序列(如\n
)。 所以要有一个\
你必须把\\
。
在正则表达式\
用于转义下一个字符,但这是另一个转义(未连接到“字符串”转义)。 所以它是\\.
更清楚一点:你希望你的字符串是“字面上的” \.(something
。为了让你需要通过放置另一个\
来逃避\
(否则你的字符串将是.(
因为\
将逃脱.
,所以它不会做任何事情。如果你很好奇,正则表达式中的.
表示任何字符,但如果你想搜索.
(一个点),你必须逃避它,猜猜你用的是什么? \
: – )
如果有一天你必须用C#编程,在C#中你可以使用@"something"
来解决这个问题。 @ disable在字符串中转义“扩展”。 所以@"\"
是一个\
如果使用/ /
作为附件将模式定义为Regex对象,则不需要双重转义,因为它永远不是字符串。