我正在尝试使用 jshint 清理一些 Javascript 代码。在正在使用的第三方脚本中,jshint 在此行中抱怨未转义的 javascript:
var cleanString = deaccentedString.replace(/([|()[{.+*?^$\\])/g,"\\$1");
我也想了解这个正则表达式的作用,但我没有看到。谁能告诉我这是为了什么以及如何以一种干净的方式编写它?
感谢您的任何提示。
我正在尝试使用 jshint 清理一些 Javascript 代码。在正在使用的第三方脚本中,jshint 在此行中抱怨未转义的 javascript:
var cleanString = deaccentedString.replace(/([|()[{.+*?^$\\])/g,"\\$1");
我也想了解这个正则表达式的作用,但我没有看到。谁能告诉我这是为了什么以及如何以一种干净的方式编写它?
感谢您的任何提示。
它匹配以下任何字符:|()[{.+*?^$\
并将其替换为转义的对应字符(反斜杠加上该字符)。
虽然在许多正则表达式方言中[
在字符类中包含未转义字符是合法的,但它可能会在其他方言中触发错误,因此请尝试以下操作:
var cleanString = deaccentedString.replace(/[|()\[{.+*?^$\\]/g,"\\$0");
(也可以删除不必要的捕获组。)
正则表达式正在选择“特殊”字符并在前面填充反斜杠。我的猜测是它不喜欢字符类中的裸“[”,但这只是一个猜测。你可以试试:
var cleanString = deaccentedString.replace(/([|()\[{.+*?^$\\])/g,"\\$1");
另一个选择是不用担心 jshint 说什么;毕竟,它只是一个咨询工具,如果代码实际上在所有浏览器中都能正常工作,那么这个建议显然很糟糕:-)