想象一下这种情况
// ----------------------------------------------------------------------------
// firebase
// ----------------------------------------------------------------------------
// utils
例如可以使用此正则表达式/(^.{20}).*$/$1/
将行修剪到特定长度,这将给出
// -----------------
// firebase
// -----------------
// utils
但是,如果我想填充其他行而不是集合 这样的长度一口气?有可能吗?
- 一个正则表达式仅用于正确填充,而不用于修剪
// ----------------- // firebase -------- // ----------------- // utils -----------
很久以前,我正在做一些正则表达式忍者挑战,我们应该做数学运算,所以....正则表达式很神奇。
我最终想要实现的是一个VSCode代码段,该代码段使我可以编写:My Section --
然后触发一段代码,将插入的文本转换为包含80个字符的注释,其中包含
// My Section -----------------------------------------------------------------
https://code.visualstudio.com/docs/editor/userdefinedsnippets
答案 0 :(得分:2)
我怀疑您可以一步执行所需的操作,而无需运行一些代码。但是您可以使用宏来执行此操作,因此可以一次触发多个步骤。在此示例中,我使用了宏扩展multi-command,但那里还有其他宏扩展。
在您的settings.json中:
"multiCommand.commands": [
{
"command": "multiCommand.pad--'s",
"interval": 750, // you don't need this, just for illustration
"sequence": [
{
"command": "type", // add 80 -'s'
"args": {
"text": "--------------------------------------------------------------------------------"
}
},
//select this wrapped line so the next snippet can use TM_SELECTED_TEXT
"cursorHomeSelect",
"cursorHomeSelect",
{
"command": "editor.action.insertSnippet", // trim to first 80 characters
"args": {
"snippet": "${TM_SELECTED_TEXT/(.{80}).*/$1/g}",
}
}
]
}
],
然后在keybindings.json中选择的任何键绑定
{
"key": "ctrl+alt+-",
"command": "multiCommand.pad--'s",
},
在下面的演示中,我将interval
留在了上面,以便您可以查看步骤,但可以将其注释掉。另外,我将我的vscode设置为以80个字符换行。
基本思想是添加太多的连字符-80-,然后选择整个换行,并仅保留前80个字符,从而修剪尾随的连字符以填充该行中的80个字符。
答案 1 :(得分:-1)
您可以使用replace的回调函数,并根据长度可以替换值
let str = `// ----------------------------------------------------------------------------
// firebase
// ----------------------------------------------------------------------------
// utils`
let final = str.replace(/^.*$/gm, (match)=>{
return match.length === 0 ? match : match.length > 20 ? match.substr(0,20) : match + `-`.repeat(20-match.length)
})
console.log(final)