我发现我无法解释的带有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?
答案 0 :(得分:2)
将igm
更改为ig
。问题是修饰符m
(多行)。