使用文本编辑器,无需编写JavaScript函数(例如,无法使用这个很棒的答案:Replacing the nth instance of a regex match in Javascript)
我如何采取这样的方式(我无法控制的专有代码结构)
map(key1, value1, key2, value2, key3, value3, key4, value4 ...)
并将其转换为此
map(
key1, value1,
key2, value2,
key3, value3,
key4, value4
...
)
我找到的一个选项是使用此正则表达式查找每个第二个逗号(([^,]*,){2})
然后替换为\1\n\t
但我想改进它:
1。它不能很好地处理第一行和最后一行
map(key1, value1,
key2, value2,
key3, value3,
key4, value4 ...)
2。仅适用于平面结构
e.g。我想不出改变这个
的方法map(key1, value1, key2, map(key3, value3, key4, value4 ...), key5, value5)
到此
map(
key1,value1,
key2,map(
key3,value3,
key4,value4
),
key5,value5
)
使用正则表达式,还是有办法?
答案 0 :(得分:3)
Eran,哦,你最后用vim
标记问题,真好! ^ _ ^
vim可以格式化一下,我写了一个小函数:
请注意,我使用\r
作为换行符,如果它不适合您,请更改为\n
function! ExpandMap()
let s = line('.')
exec 'silent s/(/(\r/g'
let e = line('.')
exec 'silent '.s.','.e.'s/),\=/\r&\r/g'
let e = line('.')
exec 'silent '.s.','.e.'s/,[^,]*\zs,\ze/,\r/g'
let e = line('.')
exec s.','.e.' normal =='
endfunction
如果您经常使用它,可以将其放在.vimrc
文件中。您也可以通过输入:so %
您可以通过以下方式为该函数调用创建地图:
`nnoremap <leader>r :call ExpandMap()<cr>`
这样,如果您要重新格式化map
行,只需将光标移动到该行,然后在Normal
模式下输入<leader>r
(默认为\)
此功能将更改
map(k1, v1, k2, map(k3, v3, k4, v4), k5, v5, k6, map(k7, v7,k8,v8,k9,v9),k10,v10,k11,v11)
到
map(
k1, v1,
k2, map(
k3, v3,
k4, v4
),
k5, v5,
k6, map(
k7, v7,
k8,v8,
k9,v9
),
k10,v10,
k11,v11
)
我在这里展示它的工作原理:
k#
,v#
现在,你什么时候卸下你的记事本++? ^ _ ^
答案 1 :(得分:1)
一个非常基本的实现,在文本方向上替换“向下”。
查找
([^(,)]+,[^(,)]+)
替换:
\n\t\1
请注意,这不适用于...
(这是什么?),并且它对嵌套深度没有任何兴趣。跟踪嵌套深度将需要具有超出正则表达式的解析器的解析器。解析编程语言与parsing HTML一样难。