Javascript 如何在vscode扩展中使用正则表达式保存返回战车?
我正在用VSCode编写一个OCaml代码样式的扩展。 我将正确格式化分隔符Javascript 如何在vscode扩展中使用正则表达式保存返回战车?,javascript,regex,Javascript,Regex,我正在用VSCode编写一个OCaml代码样式的扩展。 我将正确格式化分隔符: 我的代码在测试中运行良好,除了新行 let editor = vscode.window.activeTextEditor;) // text1 for test azae:aaz azea: zae azeaz :zae eaz: zeazea azeaz :zae // text2 for test azae:aaz azea: zae azeaz :zae eaz: zeazea a
:
我的代码在测试中运行良好,除了新行
let editor = vscode.window.activeTextEditor;)
// text1 for test azae:aaz azea: zae azeaz :zae eaz: zeazea azeaz :zae
// text2 for test azae:aaz azea: zae azeaz :zae eaz: zeazea azeaz :zae
// text3 for test azae:
// aze
let selection = editor.selection
let text = editor.document.getText(selection)
textreg = text.replace(new RegExp(/(\s|\t)*[\:](\s|\t)*/g,'gi'),": ")
editor.edit(builder => builder.replace(selection, textreg));
我获得:
text3 for test azae: // aze
我希望:
text3 for test azae:
// aze
我该怎么做
编辑:
感谢您的评论,我意识到我对\s的误解
要写出我的预期结果:
text1 for test azae:aaz azea: zae azeaz :zae eaz: zeazea azeaz :zae
text2 for test azae:aaz azea: zae azeaz :zae eaz: zeazea azeaz :zae
text3 for test azae:
aze
应该成为
text1 for test azae: aaz azea: zae azeaz: zae eaz: zeazea azeaz: zae
text2 for test azae: aaz azea: zae azeaz: zae eaz: zeazea azeaz: zae
text3 for test azae:
aze
就像@Yunnosch说我需要一个\s而不是\n
我尝试:
textreg = text.replace(new RegExp(/(\s)*[\:]([\s^\n])*/g,''),": ")
但在这种情况下
azae:aaz
变成
azae:
在模式(\s)*[\:]([\s^\n])*
中,使用字符类[\s^\n]
,它将匹配空格字符、^
和换行符。(请注意,\s
本身也与换行符匹配)
这样,test azae:的text3之后的换行符也将匹配,您将得到test azae:aze的text3
似乎您希望删除冒号前后的空格或制表符,并得到一个冒号,后跟一个空格作为返回
在这种情况下,您可以使用:
[ \t]*:[ \t]*
作为替换,请使用冒号后跟单个空格:
您的代码可能如下所示(您可以省略/i
标志)
请注意如果您打算使用\s
并希望使用^
将换行符从中排除以对其求反,则可以将其放在字符类的开头,并在\s
将匹配非空白字符的位置使用:
[^\S\n\r]*:[^\S\n\r]*
我想你可以用这个\S*:\S*
替换成新行\S
也匹配\t
,这样你就可以把它缩短为\S*
而已。看起来你不想让你的\S
匹配新行。为了找出答案,试着用你想要处理的空白的显式列表替换\s
,省去\n
@Thefourthbird这不是无条件地引入一个换行吗?我理解这是不必要的,尤其是在所有其他没有换行符的测试用例中。@Yunnosch我认为你是对的,让我删除这个注释。或者可能只匹配一个空格或选项卡,例如textreg=text.replace(new RegExp(/[\t]*:[\t]*/g,'gi'),“:”
谢谢textreg=text.replace(new RegExp(/(\s)*[\:]([^\S\n\r])*/g,'g'),“:”
做我需要的事
text.replace(/[ \t]*:[ \t]*/g, ": ")