jshint正则表达式中未转义的字符

时间:2011-06-06 13:43:07

标签: javascript regex jshint

我正在尝试使用jshint清理一些Javascript代码。在正在使用的第三方脚本中,jshint在此行中抱怨未转义的javascript:

var cleanString = deaccentedString.replace(/([|()[{.+*?^$\\])/g,"\\$1");

我也想了解这个正则表达式的作用,但我没有看到它。谁能告诉我这是为了什么以及如何以清理的方式写出来?

感谢您的任何提示。

2 个答案:

答案 0 :(得分:5)

它匹配以下任何字符:|()[{.+*?^$\并将其替换为其转义对应字符(反斜杠加上该字符)。

虽然许多正则表达式方言在字符类中包含未转义的[是合法的,但它可能会在其他人中引发错误,所以试试这个:

var cleanString = deaccentedString.replace(/[|()\[{.+*?^$\\]/g,"\\$0");

(也可以删除不必要的捕获组。)

答案 1 :(得分:3)

正则表达式选择“特殊”字符并在前面填充反斜杠。我的猜测是,它不喜欢角色类中的裸体“[”,但这只是猜测。你可以试试:

var cleanString = deaccentedString.replace(/([|()\[{.+*?^$\\])/g,"\\$1");

你有另一个选择就是不要担心jshint说的话;毕竟,它只是一个咨询工具,如果代码在所有浏览器中都能正常运行,那么建议显然是错误的: - )