Как удалить все разрывы строк из строки

У меня есть текст в текстовой области, и я прочитал его, используя атрибут .value.

Теперь я хотел бы удалить все разрывы строк (символ, который появляется при нажатии Enter) из моего текста, теперь использующего .replace с регулярным выражением, но как я могу указать разрыв строки в регулярном выражении?

Если это невозможно, есть ли другой путь?

Ответ 1

Это, вероятно, FAQ. Во всяком случае, разрывы строк (лучше: новые строки) могут быть одним из Return Carriage (CR, \r, на старых компьютерах Mac), Line Feed (LF, \n, Unices, включая Linux) или CR, за которым следует LF (\r\n, на WinDOS). (В отличие от другого ответа, это не имеет никакого отношения к кодировке символов.)

Поэтому наиболее эффективным RegExp литералом для соответствия всем вариантам является

/\r?\n|\r/

Если вы хотите совместить все строки новой строки в строке, используйте глобальное соответствие,

/\r?\n|\r/g

соответственно. Затем перейдите к методу replace, как это предлагается в нескольких других ответах. (Вероятно, вы не хотите удалять новые строки, но заменяете их на другие пробелы, например символ пробела, чтобы слова оставались неповрежденными.)

Ответ 2

То, как вы найдете разрыв строки, зависит от кодировки операционной системы. Windows будет \r\n, но Linux просто использует \n а Apple использует \r.

Я нашел это в разрывах строк JavaScript:

someText = someText.replace(/(\r\n|\n|\r)/gm, "");

Это должно удалить все виды разрывов строк.

Ответ 3

String.trim() удаляет пробелы с начала и конца строк... включая символы новой строки.

const myString = "   \n \n\n Hey! \n I'm a string!!!         \n\n";
const trimmedString = myString.trim();

console.log(trimmedString);
// outputs: "Hey! \n I'm a string!!!"

Вот пример скрипки: http://jsfiddle.net/BLs8u/

ЗАМЕТКА! он только обрезает начало и конец строки, а не разрывы строк или пробелы в середине строки.

Ответ 4

Вы можете использовать \n в регулярном выражении для строк новой строки и \r для возврата каретки.

var str2 = str.replace(/\n|\r/g, "");

В разных операционных системах используются разные концы линий с различными смесями \n и \r. Это регулярное выражение заменит их все.

Ответ 5

Если вы хотите удалить все управляющие символы, включая CR и LF, вы можете использовать это:

myString.replace(/[^\x20-\x7E]/gmi, "")

Он удалит все непечатаемые символы. Это все символы НЕ в пространстве ASCII HEX 0x20-0x7E. Не стесняйтесь изменять диапазон HEX по мере необходимости.

Ответ 6

Самое простое решение:

let str = '\t\n\r this  \n \t   \r  is \r a   \n test \t  \r \n';
str.replace(/\s+/g, ' ').trim();
console.log(str); // logs: "this is a test"

.replace() с /\s+/g regexp меняет все группы символов пробелов на единое пространство во всей строке, тогда мы .trim() результат, чтобы удалить все лишние пробелы до и после текста.

считаются символами пробелов:
[ \f\n\r\t\v​\u00a0\u1680​\u2000​-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

Ответ 7

var str = "bar\r\nbaz\nfoo";

str.replace(/[\r\n]/g, '');

>> "barbazfoo"

Ответ 8

Чтобы удалить символы новой строки, используйте это:

yourString.replace(/\r?\n?/g, '')

Затем вы можете обрезать вашу строку, чтобы удалить начальные и конечные пробелы:

yourString.trim()

Ответ 9

Линейная строка в регулярном выражении -\n, поэтому ваш script будет

var test = 'this\nis\na\ntest\nwith\newlines';
console.log(test.replace(/\n/g, ' '));

Ответ 10

Ответ, предоставленный PointedEars, - это все, что нужно большинству из нас. Но, следуя ответу Матиаса Биненса, я отправился в путешествие по Википедии и нашел его: https://en.wikipedia.org/wiki/Newline.

Ниже приведена функция вставки, которая реализует все, что вышеупомянутая вики-страница считает "новой строкой" во время этого ответа.

Если что-то не подходит для вашего случая, просто удалите это. Кроме того, если вы ищете производительность, это может быть не так, но для быстрого инструмента, который выполняет работу в любом случае, это должно быть полезно.

// replaces all "new line" characters contained in 'someString' with the given 'replacementString'
const replaceNewLineChars = ((someString, replacementString = '') => { // defaults to just removing
  const LF = '\u{000a}'; // Line Feed (\n)
  const VT = '\u{000b}'; // Vertical Tab
  const FF = '\u{000c}'; // Form Feed
  const CR = '\u{000d}'; // Carriage Return (\r)
  const CRLF = '${CR}${LF}'; // (\r\n)
  const NEL = '\u{0085}'; // Next Line
  const LS = '\u{2028}'; // Line Separator
  const PS = '\u{2029}'; // Paragraph Separator
  const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode 'lineTerminators'
  let finalString = someString.normalize('NFD'); // better safe than sorry? Or is it?
  for (let lineTerminator of lineTerminators) {
    if (finalString.includes(lineTerminator)) { // check if the string contains the current 'lineTerminator'
      let regex = new RegExp(lineTerminator.normalize('NFD'), 'gu'); // create the 'regex' for the current 'lineTerminator'
      finalString = finalString.replace(regex, replacementString); // perform the replacement
    };
  };
  return finalString.normalize('NFC'); // return the 'finalString' (without any Unicode 'lineTerminators')
});

Ответ 11

Попробуйте следующий код. Работает на всех платформах.

var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks';
var break_for_linux = 'test\nwith\nline\nbreaks';
var break_for_older_mac = 'test\rwith\rline\rbreaks';

break_for_winDOS.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_linux.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_older_mac.replace(/(\r?\n|\r)/gm, ' ');
// Output
'test with line breaks'

Ответ 12

Я добавляю свой ответ, это просто дополнение к вышеприведенному, так как для меня я попробовал все параметры /n, и он не работал, я увидел, что мой текст идет с сервера с двойной косой чертой, поэтому я использовал это:

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');

Ответ 13

Другой прием, если вы хотите получить числа, это использовать parseFloat() или parseInt(), и он вернет вам хороший номер.