【发布时间】:2018-11-04 02:02:36
【问题描述】:
我正在为 Atom 编辑器编写自己的语法。它使用正则表达式来识别应该突出显示的代码。
我想以两种格式突出显示十六进制数字:
$affe // hex number with ampersand
0xeffa // hex number with 0x
所以我想出了这个正则表达式:
(\$|0x)[A-Fa-f0-9]+
非常简单,这很好用。问题是这也会在t0x0t 中突出显示0x0 之类的内容。所以我将我的正则表达式修改为
\b(\$|0x)[A-Fa-f0-9]+\b
现在,这个正则表达式将只匹配 0xeffa 而不是 $affe,或任何其他以 $ 为前缀的数字 - 为什么会这样?我发现this answer 似乎是一个类似的问题。我认为这是因为 $ 是一个非单词字符。有没有办法修改这个正则表达式,使其匹配0xeffa 和$affe 但不匹配t0x0t 中的0x0?
我尝试的一个解决方案是简单地为每种情况编写两个单独的正则表达式 - 它可以工作,但它似乎违背了正则表达式的目的。
【问题讨论】:
-
将
\b放入(\$|\b0x)[A-Fa-f0-9]+\b -
\b标记单词字符[A-Za-z0-9_]和非单词字符之间的转换。但是$是非单词字符,而0是单词字符。所以把它放在($|0x)前面只会匹配 $ 如果它前面是一个单词字符。
标签: regex coffeescript atom-editor