Prettier 删除 Angular 中的转义字符

Prettier removes escape characters in Angular

我在我的 Angular 项目中使用 Prettier,我正在尝试为表单验证程序包含一个正则表达式模式。当我 运行 Prettier 时,字符串从根本上被改变,使模式验证功能失调,如下所示:

之前:

export const EmailVal: ScaffoldValidator = PatternVal(
  "/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/"
);

之后:

export const EmailVal: ScaffoldValidator = PatternVal(
  "/^[0-9a-zA-Z]([-.w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9}$/"
);

我已经阅读了 Prettier Docs,它谈到了在单引号和双引号的上下文中改变转义,但断言其他转义将保持不变。我也浏览了我的 tsLint.json,但对我来说没有什么特别的来源。它确实将 "Codelyzer" 表示为规则集。有没有我可以禁用的设置来防止这种行为?

您可以直接使用正则表达式(注意:没有引号 - 只有斜杠):

/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/;

或更正字符串转义(注意双反斜杠):

"/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/";
                  ^^                                 ^^              ^^  

考虑使用 EsLint - 它可以就这些情况向您发出警告(请参阅 no-useless-escape rule):