有没有办法删除数组中字符串中的换行符?
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)
【讨论】:
以上是关于有没有办法删除数组中字符串中的换行符?的主要内容,如果未能解决你的问题,请参考以下文章