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