Javascript 转换为换行符

Javascript 转换为换行符,javascript,powershell,Javascript,Powershell,我正在使用powershell,并有类似 $testResult = vstest.console $myPathToUnitTests.dll 结果很好,但有新行(新行,如中所示) 我想在我的HTML文件中使用它,并将结果按原样保存到javascript文件中 $testResult = vstest.console $myPathToUnitTests.dll $js = "const result = $($testResult);" $js | Set-Content $myPathT

我正在使用powershell,并有类似

$testResult = vstest.console $myPathToUnitTests.dll
结果很好,但有新行(新行,如中所示)

我想在我的HTML文件中使用它,并将结果按原样保存到javascript文件中

$testResult = vstest.console $myPathToUnitTests.dll
$js = "const result = $($testResult);"
$js | Set-Content $myPathToJsFile
这个很好用,我可以用它

问题是,它没有显示换行符。在我尝试过的javascript文件中

result = result.replace(/(?:\r\n|\r|\n)/g, '<br />');
result=result.replace(/(?:\r\n |\r |\n)/g,“
”);
在我尝试过的powershell中

 $testResult = $testResult.replace("\n", "<br />")
$testResult=$testResult.replace(“\n”和“
”)
但是,如果我在powershell ID中的testResult上放置一个断点,并将鼠标悬停在我看到的变量testResult上


这意味着它知道有新行/换行。我似乎无法持久化它们:(

vstest.console$myPathToUnitTests.dll
返回一个数组,而不是一个字符串,因此您需要将所有字符串(行)与操作符连接在一起,如html:

$TestResult -Join "<br />"
注意:为此,我建议使用系统的默认换行定义(
[system.Environment]::newline
),而不是硬编码的换行(例如:
`r`n

你怎么知道的? 您无法轻松预测未知cmdlet或命令返回的内容,但PowerShell在一次处理管道中的多个对象(数组)方面非常出色,这是假设每个未知cmdlet或命令在分配给变量时都可能返回数组中收集的多个对象(或字符串)的原因。 不用说,已经有几十个类似的PowerShell StackOverflow问题与此问题具有相同的原因。然而,相关问题本身差异太大,无法将其标记为重复问题。在这些其他问题中,本机PowerShell命令
Get Content
可能是导致此PowerShell p的最常见原因编程陷阱

找出未知cmdlet当前返回的内容的最佳方法是使用
GetType()
方法(不适用于
$Null
)或使用
PSTypeNames
属性(通常返回继承类型的数组)显示其类型:

但这并不保证它总是返回相同的(单个)对象类型:

PS C:\> (get-content .\MultipleLines.txt).PSTypeNames
System.Object[]
System.Array
System.Object
当(字符串)数组封装在字符串中时,(字符串)数组通常直接显示在主机上的多行上(由新行分隔)(由空格分隔),这可能会触发识别问题:

PS C:\> $a = "a", "b", "c"
PS C:\> $a
a
b
c
PS C:\> "$a"
a b c
PS C:\>
这样的东西总是返回数组吗? cmdlet或命令可能返回对象(字符串)或对象数组(字符串)的不确定性确实提出了一个新问题(如您所评论)。
这种不确定性实际上很容易在PowerShell中解决;只需将输出包装在一个数组中(在括号中,开头带有@,另请参见:):

  • 如果输出不是一个数组,它将成为一个带有单个对象(字符串)的数组
  • 如果输出已经是一个数组,它将保持完全相同的数组
在后一种情况下,重要的是要了解没有额外的 将级别添加到生成的数组中

此技术通常用于PowerShell:

$a = "a", "b", "c"
@($a)[0] # still returns: "a"
@(@(@($a)))[0] # or even this returns: "a"

<代码> $TestReals= $TestRebug -替换'\r\\n','BR/> '/COD> > Que>>$TestReule< /Cord>不是字符串,而是字符串数组,这意味着您可能需要做:<代码> $TestReals= $TestReals-连接(
)< /C> >如果它考虑字符串:使用Systems <代码> [ Systems .Engul]::NewLine定义:
$testResult=$testResult-replace[System.Environment]::NewLine,“
@iRon就是这样,但总是这样吗?像这样的东西总是会返回一个数组还是会返回一个字符串/int/enum etcI无法判断,但是如果你把它放入一个数组(
@(…)
),比如
$testResult=@($TestResult)-加入“
这是一个“是”。这里需要注意的重要一点是,如果它已经是一个数组,它将保持相同的数组,而不会创建另一个级别(这是标准的PowerShell行为)。这是一个多么惊人的答案
PS C:\> $a = "a", "b", "c"
PS C:\> $a
a
b
c
PS C:\> "$a"
a b c
PS C:\>
$a = "a", "b", "c"
@($a)[0] # still returns: "a"
@(@(@($a)))[0] # or even this returns: "a"