Я нашел странное поведение с заменой и регулярными выражениями, которые я не могу объяснить. У меня есть функция 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?
EDIT: мне не нужно "исправлять" код, я мог бы сделать это с помощью 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 [ " ", " " ]
WAT?
Измените igm
на ig
. Проблема заключается в модификаторе m
(несколько строк).