正则表达式:关于\ b行为的困惑

时间:2018-05-24 18:45:33

标签: regex coffeescript atom-editor

我正在为Atom编辑器编写自己的语法。它使用正则表达式来识别应该突出显示的代码。

我想以两种格式突出显示十六进制数字:

SelectedIndexChanged

所以我提出了这个正则表达式:

$affe     // hex number with ampersand
0xeffa    // hex number with 0x

非常简单,这很好用。问题是,这也会在(\$|0x)[A-Fa-f0-9]+ 中突出显示0x0之类的内容。所以我将我的正则表达式修改为

t0x0t

现在,此正则表达式只匹配\b(\$|0x)[A-Fa-f0-9]+\b 但不匹配0xeffa,或者前缀为$的任何其他数字 - 为什么会这样?我发现this answer似乎是一个类似的问题。我认为这是因为$affe是一个非单词字符。有没有办法修改此正则表达式,使其与$中的0xeffa$affe匹配但不匹配0x0

我尝试过的一个解决方案就是为每个案例简单地写两个单独的正则表达式 - 它可以工作,但它似乎打败了正则表达式的目的。

1 个答案:

答案 0 :(得分:1)

您应该更改\b适用的位置:

(\$|\b0x)[A-Fa-f0-9]+\b

否则,\b引擎前面的$预计[a-zA-Z0-9_]之前会出现$集中的字词,即a$af00