Prettier 移除 Angular 中的转义字符

Posted

技术标签:

【中文标题】Prettier 移除 Angular 中的转义字符【英文标题】:Prettier removes escape characters in Angular 【发布时间】:2020-09-15 23:03:29 【问题描述】:

我在我的 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”表示为规则集。是否有某个设置我可以禁用以防止这种行为?

【问题讨论】:

我不认为那些斜线是 ever 实际上在字符串中。要获得实际的反斜杠,您需要 在字符串中 对其进行转义:[-.\\w]。或者使用正确的正则表达式文字形式/.../,而不是传递字符串。 【参考方案1】:

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

/^[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):

【讨论】:

以上是关于Prettier 移除 Angular 中的转义字符的主要内容,如果未能解决你的问题,请参考以下文章

prettier 函数function 后面空格移除,.prettierrc与.eslintrc.js冲突

有没有办法列出 Angular 项目中所有活动的 ESLint / Prettier 规则?

为啥 prettier 开始拆分短线?

为啥 Prettier 不包括尾随逗号?

防止 Prettier(代码格式化程序)和 ESLint/TSLint 之间的冲突

VSCode Prettier 将 Condition 语句分隔成单独的行