Вопрос:
Как конвертировать var x+=1+2+3+(5+6+7)
в var x += 1 + 2 + 3 + (5 + 6 + 7)
Regex Отрицания в Vim
Детали:
Использование регулярных выражений, что-то вроде :%s/+/\ x\ /g
не будет работать, потому что он будет конвертировать +=
в + =
(среди другие проблемы). Поэтому вместо этого можно использовать отрицания (отрицательные, nots, все, что они называются), например :%s/\s\@!+/\ +/g
, что примерно так же сложно, как можно сказать «знак плюс без пустого пространства перед ним». Но теперь это преобразует что-то вроде x++
в x + +
. Мне нужно что-то более сложное. Мне нужно больше одного ограничения в отрицании и последующее ограничение. Что-то вроде этого, но это не работает :%s/[\s+]\@!+\x\@!/\ +/g
Может ли кто-нибудь предоставить одно или, возможно, два оператора регулярных выражений, которые выловят примерный оператор, чтобы я мог моделировать остальные мои правила на нем/им.
Мотивация:
Я нахожу beautifiers для таких языков, как Javascript или PHP не дают мне полный контроль (см here). Поэтому я пытаюсь использовать регулярное выражение для выполнения следующих преобразований:
foo(1,2,3,4)
→foo(1, 2, 3, 4)
var x=1*2*3
→var x = 1 * 2 * 3
var x=1%2%3
→var x = 1 % 2 % 3
var x=a&&b&&c
→var x = a && b && c
var x=a&b&c
→var x = a & b & c
Любая обратная связь также будет оценена
регулярные выражения работают только при регулярных вводах. ваш язык несколько нерегулярен, поэтому будет сложно или невозможно получить одно регулярное выражение, которое может обрабатывать все варианты. –
@MarcB Я думал о другом правиле для каждого оператора (т. Е. Для «+», один для '+ =' один для '-' ...), и я понимаю, что это не сработает для безумно сложных выражений типа' var x + = x +++++ y') – puk
он хочет '\ w', я прав? – gaussblurinc