Заменить непреднамеренное удаление новых строк

1

Я нашел странное поведение с заменой и регулярными выражениями, которые я не могу объяснить. У меня есть функция 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?

  • 3
    почему вы воссоздаете функцию trim (), если она уже существует?
  • 0
    Собственная отделка javascripts () также удаляет вкладки и не является многострочной, я хочу удалить дополнительные пробелы в каждой строке, но не символы новой строки или вкладки, она не выполняет именно то, что мне нужно, и функция достаточно коротка, чтобы должно быть легко ...
Показать ещё 4 комментария
Теги:

1 ответ

2

Измените igm на ig. Проблема заключается в модификаторе m (несколько строк).

  • 0
    Но если я изменю модификатор, он будет удалять только пробелы в начале и конце всего текста, а не в каждой строке. Я хочу знать, почему он удаляет новые строки во втором примере, мне не нужен взлом, я мог бы сделать это с помощью карты и обрезки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню