首页 > 解决方案 > 为什么 VS Code 的 yaml 扩展将 period 归类为浮点数?

问题描述

我正在开发自己的颜色主题。.yml当我偶然发现 VS Code 的 YAML 扩展将period解释为float时,我尝试为文件进行自定义着色。

这是正确的行为吗?它不应该被解释为一个普通的不带引号的字符串吗?

定义语法的正则表达式的剥离版本。它将成功匹配期间。实际代码。

(?x:[-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)?)

使用“开发人员:检查编辑器标记和范围”的屏幕截图

标签: visual-studio-codeyaml

解决方案


这不是 YAML 1.2 的正确行为。根据规范,规范形式是

匹配正则表达式的, , , 或科学0.inf-.inf法。.nan-? [1-9] ( \. [0-9]* [1-9] )? ( e [-+] [1-9] [0-9]* )?

再往下,给出了另一个正则表达式来识别核心模式中的浮点数,这更轻松:

[-+]? ( \. [0-9]+ | [0-9]+ ( \. [0-9]* )? ) ( [eE] [-+]? [0-9]+ )?

这仍然与单个时期不匹配。

但是,对于 YAML 1.1,这正确的行为。在这里,类型注册表中给出的浮点数的正则表达式是

[-+]?([0-9][0-9_]*)?\.[0-9.]*([eE][-+][0-9]+)?

这很可能是正则表达式的来源,因为它与元数据相匹配。

YAML 1.2 的采用非常缓慢,一些实现在最近几年才获得支持,而一些(例如 SnakeYAML)仍然停留在 YAML 1.1。因此,使用 YAML 1.2 正则表达式并不是一个显而易见的决定。


推荐阅读