转换为换行符

时间:2018-02-09 10:02:53

标签: javascript powershell

我正在使用PowerShell,并且有类似

的内容
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />

<div class="row">
  <div class="col-5">
    <div class="card">
      <div class="card-body text-left d-flex flex-column justify-content-end">
        <a href="#" class="card-link">Link</a>
        <a href="#" class="card-link">Link</a>
        <h5 class="card-title">Title</h5>
        <p class="card-text">Text goes here</p>
        <a href="#" class="btn">Button</a>
        <a href="#" class="btn">Button</a>
      </div>
    </div>
  </div>
</div>

结果很好,但有新行(换行符,如\ n)。

我想在我的HTML文件中使用它,并将结果保存为javascript文件。

$testResult = vstest.console $myPathToUnitTests.dll

这很好用,我可以用它。

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

$testResult = vstest.console $myPathToUnitTests.dll
$js = "const result = $($testResult);"
$js | Set-Content $myPathToJsFile

在powershell中,我试过

result = result.replace(/(?:\r\n|\r|\n)/g, '<br />');

但是,如果我在powershell ID中的testResult上放置一个断点并将鼠标悬停在变量testResult上,我看到

enter image description here

这意味着它知道有新的换行符/换行符。我似乎无法坚持下去:(

1 个答案:

答案 0 :(得分:2)

vstest.console $myPathToUnitTests.dll会返回数组而不是字符串,因此您需要加入所有字符串(行)和-join运算符,类似于html:

$TestResult -Join "<br />"

或者如果您想创建多行文本文件:

$TestResult -Join [System.Environment]::NewLine

注意:为此,我建议使用系统的默认换行符定义([System.Environment]::NewLine)而不是硬编码的换行符(例如:`r`n)。 < / p>

你怎么知道这个?

您无法轻松预测未知cmdlet或命令返回的内容,但PowerShell在管道中同时处理多个对象(数组)时非常安静,这是假设每个未知cmdlet或命令可能会在分配给变量时返回在数组中收集的多个对象(或字符串)。 毋庸置疑,已经存在数十个类似PowerShell StackOverflow的问题,就像这个问题一样。然而,相关问题本身的区别太大,不能将它们标记为重复。在这些其他问题中,本机PowerShell命令Get-Content可能是此PowerShell编程陷阱的最常见原因。

找出未知cmdlet当前返回的内容的最佳方法是使用GetType()方法(不能在$Null上工作)或使用{来显示其类型{1}}属性(通常返回一个继承类型的数组):

PSTypeNames

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

PS C:\> (get-content .\SingleLine.txt).PSTypeNames
System.String
System.Object

(字符串)数组通常直接显示在多个行(由换行符分隔)的主机上存放(由空格分隔)当它们被封装在一个字符串中时,可能是一个识别问题的触发器:

PS C:\> (get-content .\MultipleLines.txt).PSTypeNames
System.Object[]
System.Array
System.Object

像这样的东西总会返回一个数组吗?

cmdlet或命令可以返回对象(字符串)或对象数组(字符串)的不确定性确实引发了一个新问题(正如您所评论的那样)。
这种不确定性实际上很容易在PowerShell中解决;只需将输出包装在一个数组中(在括号中用@开头,另请参阅:How can I force Powershell to return an array when a call only returns one object?):

  • 如果输出不是数组,则它将成为具有单个对象(字符串)的数组
  • 如果输出已经是一个数组,它将保持完全相同的数组。
  

在后一种情况下,重要的是要明白没有额外的   级别将添加到结果数组

此技术通常用于PowerShell:

PS C:\> $a = "a", "b", "c"
PS C:\> $a
a
b
c
PS C:\> "$a"
a b c
PS C:\>