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



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

583   12  

12 ответов:

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

таким образом, наиболее эффективным!--5--> литерал, чтобы соответствовать всем вариантам составляет

/\r?\n|\r/

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

/\r?\n|\r/g

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

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

Я нашел это в разрывы строк javascript

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

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

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/

внимание! он только обрезает начало и конец строки, а не строки или пробел в середине строки.

можно использовать \n в regex строки, и \r для возврата каретки.

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

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

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

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

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

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

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

>> "barbazfoo"

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

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

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

yourString.trim()

самым простым решением будет:

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]

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

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

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

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

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

// 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`)
});

попробуйте этот код, работает на всех платформах:

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'

еще один трюк, если вы хотите получить номера, это использовать parseFloat() или parseInt() и он вернет вам красивый номер

Comments

    Ничего не найдено.