2016-06-14 1 views
2

Я расширяю Prism с помощью специального языка, и я хочу выделить типы (int, float, bool).Призма: типы совпадающих слов не начинаются с точки или: символ

Я хочу сопоставить строки, которые не начинаются с точки или символа a:.

Я уже пробовал только с регулярным выражением, но не смог заставить его работать, поэтому я, вероятно, должен использовать 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

Нельзя использовать '/ (^ | [^ :.]) \ b (int | bool | float) \ b /' с 'lookbehind: true'? –

+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

Спасибо, это сработало точно так, как предполагалось! –

Смежные вопросы