有没有办法删除数组中字符串中的换行符?

Posted

技术标签:

【中文标题】有没有办法删除数组中字符串中的换行符?【英文标题】:Is there a way to remove a newline character within a string in an array? 【发布时间】:2022-01-22 07:00:35 【问题描述】:

我正在尝试使用 javascript 解析一个数组,给定一个连字符的字符串。

- foo
- bar

我已经非常接近弄清楚了。我已将其修剪到使用此代码获取这两个项目的位置。

 const chunks = input.split(/\ ?\-\ ?/);
 chunks = chunks.slice(1);

这会将先前的输入缩减为这个。

["foo\n", "bar"]

我尝试了许多解决方案来从字符串中取出换行符,而不管数组中的项目数如何,但没有任何结果。如果有人能帮我解决这个问题,我们将不胜感激。

【问题讨论】:

【参考方案1】:
chunks.map((data) => 
    data = data.replace(/(\r\n|\n|\r|\\n|\\r)/gm, "");

   return data;
)

【讨论】:

【参考方案2】:

您可以像这样循环并删除换行符。

const data = ["foo\n", "bar"]

const res = data.map(str => str.replaceAll('\n', ''))
console.log(res)

【讨论】:

【参考方案3】:

而不是在拆分后进行修剪。明智地拆分,然后映射以替换不需要的字符串。无需循环多次。

const str = ` - foo
 - bar`;
let chunks = str.split("\n").map(s => s.replace(/^\W+/, ""));
console.log(chunks)

let chunks2 = str.split("\n").map(s => s.split(" ")[2]);
console.log(chunks2)

【讨论】:

您的示例字符串输入只有一个line。如果是两行,当前的解决方案将包含一个空字符串。【参考方案4】:

您可以将regex match 用于:

匹配前缀“-”但从捕获中排除 (?<=- ) 和任意数量的不同于“\n”的字符 [^\n]*

const str = `
- foo
- bar
`

console.log(str.match(/(?<=- )[^\n]*/g))

【讨论】:

【参考方案5】:

例如,您可以拆分、删除所有空条目,然后修剪每个项目以同时删除所有前导和尾随空白字符,包括换行符。

注意您不必转义空格和连字符。

const input = `- foo
- bar`;
const chunks = input.split(/ ?- ?/)
  .filter(Boolean)
  .map(s => s.trim());

console.log(chunks);

或仅删除换行符的相同方法:

const input = `- foo
- bar`;
const chunks = input.split(/ ?- ?/)
  .filter(Boolean)
  .map(s => s.replace(/\r?\n|\r/g, ''));

console.log(chunks);

除了拆分之外,您还可以将匹配与捕获组一起使用:

^ ?- ?(.*)

模式匹配:

^ 字符串开始 ?- ? 在可选空格之间匹配 - (.*)捕获组1,匹配其余行

const input = `- foo
- bar`;
const chunks = Array.from(input.matchAll(/^ ?- ?(.*)/gm), m => m[1]);
console.log(chunks);

【讨论】:

【参考方案6】:

    const str = ` - foo
     - bar`;
     
     const result = str.replace(/([\r\n|\n|\r])/gm, "")
     console.log(result)

这应该删除字符串中的各种换行符,然后您可以执行其他操作以获得预期的结果。

const str = ` - foo
         - bar`;
         
         const result = str.replace(/([\r\n|\n|\r|^\s+])/gm, "")
         console.log(result)
         
         const actualResult = result.split('-')
         actualResult.splice(0,1)
         console.log(actualResult)
         
         

【讨论】:

以上是关于有没有办法删除数组中字符串中的换行符?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让术语模式中的区域遵循换行?

如何从Java中的文件中删除换行符?

有没有办法在 Microsoft 的 DAX 语言的文本字符串中添加换行符?

如何阻止GCC从obj文件中的字符串文字中删除尾随换行符?

删除引用字符串中的换行符[重复]

从 C# 中的字符串中删除换行符的最快方法是啥?