替换意外删除的新行

时间:2018-10-24 16:44:46

标签: javascript regex

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

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')

我只是对两个示例中的不同行为感到好奇。 如果我使用match而不是replace,则会得到以下信息:

'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 [ " ", " " ]

WAT?

1 个答案:

答案 0 :(得分:2)

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