如何将var x+=1+2+3+(5+6+7)
转换为var x += 1 + 2 + 3 + ( 5 + 6 + 7 )
使用正则表达式,:%s/+/\ x\ /g
之类的内容将无效,因为它会将+=
转换为+ =
(以及其他问题)。所以相反,人们会使用否定(否定,不是,无论他们被称为什么),如:%s/\s\@!+/\ +/g
,这就像人们可以说“加号之前没有空格”那样复杂。但现在,这会将x++
之类的内容转换为x + +
。我需要的是更复杂的东西。我在否定中需要多个约束,之后需要一个额外的约束。类似的东西,但这不起作用:%s/[\s+]\@!+\x\@!/\ +/g
有人可以提供一个或两个可以填充示例运算符的正则表达式语句,这样我就可以对其上的其余规则进行建模。
我发现像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
任何反馈也将不胜感激
答案 0 :(得分:0)
感谢很好的反馈,我现在有一个像这样的正则表达式。我正在运行这两个正则表达式:
:%s/\(\w\)\([+\-*\/%|&~)=]\)/\1\ \2/g
:%s/\([+\-*\/%|&~,(=]\)\(\w\)/\1\ \2/g
它运作得相当好。以下是一些结果。
(1+2+3+4,1+2+3+4,1+2+3+4) --> ( 1 + 2 + 3 + 4, 1 + 2 + 3 + 4, 1 + 2 + 3 + 4 )
(1-2-3-4,1-2-3-4,1-2-3-4) --> ( 1 - 2 - 3 - 4, 1 - 2 - 3 - 4, 1 - 2 - 3 - 4 )
(1*2*3*4,1*2*3*4,1*2*3*4) --> ( 1 * 2 * 3 * 4, 1 * 2 * 3 * 4, 1 * 2 * 3 * 4 )
(1/2/3/4,1/2/3/4,1/2/3/4) --> ( 1 / 2 / 3 / 4, 1 / 2 / 3 / 4, 1 / 2 / 3 / 4 )
(1%2%3%4,1%2%3%4,1%2%3%4) --> ( 1 % 2 % 3 % 4, 1 % 2 % 3 % 4, 1 % 2 % 3 % 4 )
(1|2|3|4,1|2|3|4,1|2|3|4) --> ( 1 | 2 | 3 | 4, 1 | 2 | 3 | 4, 1 | 2 | 3 | 4 )
(1&2&3&4,1&2&3&4,1&2&3&4) --> ( 1 & 2 & 3 & 4, 1 & 2 & 3 & 4, 1 & 2 & 3 & 4 )
(1~2~3~4,1~2~3~4,1~2~3~4) --> ( 1 ~ 2 ~ 3 ~ 4, 1 ~ 2 ~ 3 ~ 4, 1 ~ 2 ~ 3 ~ 4 )
(1&&2&&3&&4,1&&2&&3&&4,1&&2&&3&&4) --> ( 1 && 2 && 3 && 4, 1 && 2 && 3 && 4, 1 && 2 && 3 && 4 )
(1||2||3||4,1||2||3||4,1||2||3||4) --> ( 1 || 2 || 3 || 4, 1 || 2 || 3 || 4, 1 || 2 || 3 || 4 )
var x=1+(2+(3+4*(965%(123/(456-789))))); --> var x = 1 +( 2 +( 3 + 4 *( 965 %( 123 /( 456 - 789 )))));
除嵌套括号外,它似乎工作正常。如果我修复了嵌套括号问题,我会在这里更新它。