Символ строки новой строки JavaScript?

и n универсальная последовательность символов новой строки в Javascript для всех платформ? Если нет, то как определить характер для текущей среды?

Я не спрашиваю об элементе новой строки HTML (<BR/>). Я спрашиваю о последовательности символов новой строки, используемой в строках JavaScript.

16 ответов


Я только что протестировал несколько браузеров, используя этот глупый бит JavaScript:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">

</textarea>

IE8 и Opera 9 в Windows используют \r\n. Все другие браузеры, которые я тестировал (Safari 4 и Firefox 3.5 В Windows и Firefox 3.0 в Linux), используют \n. Они все справятся \n просто отлично при установке значения, хотя IE и Opera преобразуют это обратно в \r\n снова внутренне. Есть статья SitePoint с более подробной информацией, называемой окончание строки в Javascript.

обратите внимание также, что это не зависит от фактических окончаний строк в самом HTML-файле (оба \n и \r\n дать те же результаты).

при отправке формы все браузеры канонизируют новые строки в %0D%0A в кодировке URL-адреса. Чтобы увидеть это, загрузите, например,data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> и нажимаем кнопку "Отправить". (Некоторые браузеры блокируют загрузку отправленной страницы,но вы можете увидеть значения формы в URL-кодировке в консоли.)

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

lines = foo.value.split(/\r\n|\r|\n/g);

Да, это универсально.

хотя '\n' - Это универсальный newline символы, вы должны иметь в виду, что, в зависимости от вашего ввода, новые символы строки могут предшествовать символам возврата каретки ('\r').


Не используйте \n, просто попробуйте следующее:

    var string = "this\
    is a multi\
    line\
    string";

просто введите назад-Слэш и продолжать truckin'! Работает как заклинание.


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

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

да используйте \n, если вы не генерируете html-код, в котором вы хотите использовать <br />


функция ссылки по электронной почте я использую "%0D%0A"

function sendMail() {   
var bodydata="Before "+ "%0D%0A";
    bodydata+="After"

var MailMSG = "mailto:aaa@sss.com" 
         + "?cc=07@sss.com" 
         + "&subject=subject" 
         + "&body=" + bodydata; 
window.location.href = MailMSG; 
} 

[HTML]

<a href="#" onClick="sendMail()">Contact Us</a>

получить разделитель строк для текущего браузера:

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}

Примечание-при использовании ExtendScript JavaScript (язык сценариев Adobe, используемый в приложениях, таких как Photoshop CS3+), символ для использования "\r". "\n " будет интерпретироваться как символ шрифта, и многие шрифты, таким образом, будут иметь символ блока.

например (чтобы выбрать слой с именем "Примечание" и добавить строку после всех периодов):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");

в ответ Nilay выше (я не могу комментировать, недостаточно репутации):

кто-нибудь знает этот тип кода для клавиши tab? я попробовал "%0D%09", но не работать. - Нилай 26 '15 сентября в 13: 57

Tab-это один символ, поэтому, если вы попробуете просто %09 все должно быть хорошо. Пример для просмотра отдельных кодов символов:

var output = "";
var s="aaa\tbbb\tccc";
for (var i = 0; i < s.length; i++) {
  output += "i=" + i + " charAt=" + s.charAt(i) + " charCodeAt=" + s.charCodeAt(i) + "\n";
}

console.log(output);

У меня была проблема выражения строку с \n или \r\n.
Магически персонаж \r который используется для возврата каретки работал для меня, как строки.
Поэтому в некоторых случаях полезно рассмотреть \r тоже.


вы можете использовать ` цитаты (которые ниже кнопки Esc) с ES6. Таким образом, вы можете написать что-то вроде этого:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;

Я считаю, что это-когда вы работаете со строками JS.

Если вы генерируете HTML, вам придется использовать <br /> теги (не \n, поскольку вы больше не имеете дело с JS)


printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently 00 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

принты:

Welcome!
Your balance is currently 00 and your interest rate is 1%.

вы можете использовать шестнадцатеричные значения ascii, что-то вроде этого(это сработало для меня):

 var string = "this %0d%0a is a multiline %0d%0a string";

результат будет такой:

this 
is a multiline 
string

на \n просто отлично подходит для всех случаев, с которыми я столкнулся. Я работаю с web, используйте \n и не беспокойтесь об этом (если у вас не было каких-либо проблем, связанных с новой строкой).


можно использовать <br/> и document.write/, document.writeln один.