javascript - 替换意外删除的新行

标签 javascript regex

我发现了一个我无法解释的替换和正则表达式的奇怪行为。我有一个 trim 功能,可以从文本的每一行的开头和结尾删除空格:

function trim(str) {
  return str.replace(/^\s+|\s+$/igm, '');
}

但是当文本用\r\n 而不是\n 多行时,它也会删除新行:

console.log(trim('A string \n- with several \n- lines'))
// A string\n- with several\n- lines
console.log(trim('A string \r\n- with several \r\n- lines'))
// A string- with several- lines

有人可以告诉我这是我不理解的预期行为还是只是 JavaScript 的缺陷之一?

编辑:我不需要“修复”代码,我可以使用 split + map + trim 来完成:

'A string \r\n- with several \r\n- lines'.split('\r\n').map(x => x.trim()).join('\r\n')

我只是对这两个示例中的不同行为感到好奇。 如果我使用匹配而不是替换我得到这个:

'A string \r\n- with several \r\n- lines'.match(/^\s+|\s+$/igm)
Array(4) [ " \r", "\n", " \r", "\n" ]
'A string \n- with several \n- lines'.match(/^\s+|\s+$/igm)
Array [ " ", " " ]

什么?

最佳答案

igm 更改为 ig。问题是修饰符 m(多行)。

关于javascript - 替换意外删除的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52974180/

相关文章:

javascript - 为什么我的 jQuery 插件在多个选择器上失败?

php - 动态表单未发布完整数组

javascript - tumblr 头像 img 调整大小问题。尝试使用正则表达式来调整 img 的大小。

java - 具有可变组数的正则表达式?

c# - 测试所有形式的邮政信箱

Javascript 拼接正在删除除请求的元素之外的所有内容

javascript - for 循环内的 value.length 不起作用。 Mongoose ejs

javascript - 将一个类传递给 Vuejs 中的 Prop

node.js - 在 Mongodb 中搜索,从 API 传递变量(搜索词)

c# - 字符串的正则表达式