Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在vscode扩展中使用正则表达式保存返回战车?_Javascript_Regex - Fatal编程技术网

Javascript 如何在vscode扩展中使用正则表达式保存返回战车?

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

我正在用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 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, ": ")