Как удалить все разрывы строк из строки
У меня есть текст в текстовой области, и я прочитал его, используя атрибут .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()
, и он вернет вам хороший номер.