3

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

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

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

感谢您的任何提示。

4

2 回答 2

5

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

虽然在许多正则表达式方言中[在字符类中包含未转义字符是合法的,但它可能会在其他方言中触发错误,因此请尝试以下操作:

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

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

于 2011-06-06T13:49:33.003 回答
3

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

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

另一个选择是不用担心 jshint 说什么;毕竟,它只是一个咨询工具,如果代码实际上在所有浏览器中都能正常工作,那么这个建议显然很糟糕:-)

于 2011-06-06T13:49:13.300 回答