2016-06-14 30 views
2

我使用自定义语言扩展Prism,我想突出显示类型(int,float,bool)。棱镜:匹配语言类型不是以点或字符开头:字符

我想匹配不以点或符号开头的字符串。

我已经尝试过使用正则表达式,但无法使其工作,所以我可能必须使用Prism's lookbehind parameter,但我无法完成此项工作。

float JsValue.float 
float JsValue:float(float testFloat) 
int JsValue.int 
int JsValue:int(int testInt) 

下面的正则表达式捕获所有不是我想要的东西。

/\b(int|bool|float)\b/ 

下面的正则表达式(感谢@anubhava)抓住我想要什么,但也抓住了 “(” 字符后函数名

/(?:^|[^:.])\b(int|bool|float)\b/ 

感谢

+0

不应该在'lookbehind:true'中使用'/(^ | [^ :.])\ b(int | bool | float)\ b /'? –

+1

你的正则表达式看起来不错(甚至可以更简单:'/ [^ :.(int | bool | float)\ b /')。你真的尝试过使用这个正则表达式lookbehind设置为true吗?我认为它应该工作。 –

回答

1

reference you linked to状态:

lookbehind:
该选项可以减轻JavaScript缺乏逆向查看的风险。 当设置为true时,在匹配此令牌时,正则表达式模式中的第一个捕获组将被丢弃,因此它的行为就好像是向后看似的。

实际上,它是PCRE \K operator的实现。

所以,使用

/(^|[^:.])\b(int|bool|float)\b/ 
^^^^^^^^^ 

其中(^|[^:.])捕获基。也设置lookbehind: true

+1

谢谢,这完全按照预期工作! –

相关问题