В JavaScript существует нечто похожее на Java System.getProperty("line.separator");
?
Изменить: я использую среду без браузера JavaScript Node.js
В JavaScript существует нечто похожее на Java System.getProperty("line.separator");
?
Изменить: я использую среду без браузера JavaScript Node.js
У меня была та же проблема и наткнулся на этот довольно старый вопрос. После некоторого инвестирования я наконец нашел os.EOL
в самом конце документации os.
var os = require('os')
console.log(JSON.stringify(os.EOL)) // prints "\n" on my Mac
JSON.stringify
в этом случае важна, иначе вы увидите только пустую строку в консоли (что имеет смысл, потому что это то, что она должна делать). В обычном случае это не нужно.
Не определено стандартным, нет. Раздел 7.3 определяет ограничители строк для исходного кода программы JavaScript (их четыре), но ничего не связано с определением терминатора терминатора линии для текст.
Если вы говорите о невзаимодействующих средах (сценарии оболочки, серверный JavaScript и т.д.), я бы посмотрел документацию для среды, в которой вы работаете (NodeJS, Rhino и т.д.), который, как мы надеемся, будет иметь такую экологическую информацию для вас. (В Rhino, конечно, вы можете просто использовать Java.)
Если вы говорите о средах, основанных на браузере, в основном используется \n
, но это то, что "по большому счету" может вас укусить.:-) Некоторые браузеры даже конвертируют концы строк, например, в textarea
, прежде чем JavaScript их даже увидит. Например, исходная версия на этой странице вообще не содержит каретки. И все же, если вы запустите эту страницу в Internet Explorer, обратите внимание, что она говорит, что она обнаружила символы \r
в текстовой области. Не так Chrome или Firefox (даже при работе в Windows), но Opera добавляет их (даже при работе на * nix). Поэтому в браузерах я стараюсь "нормализовать" окончания строк при доступе к значениям многострочного поля через str = str.replace(/(?:\r\n|\r)+/g, "\n");
, на всякий случай. (Предполагается, что \r
, как сам по себе, так и после него \n
, должен быть строкой break; для старых Mac, использующих \r
самостоятельно.)
Продолжая работу браузера, поскольку разные браузеры делают разные вещи даже на одной и той же ОС, есть ли способ узнать, что они используют? Почему, да, есть, вы можете узнать с помощью трюки:
function getLineBreakSequence() {
var div, ta, text;
div = document.createElement("div");
div.innerHTML = "<textarea>one\ntwo</textarea>";
ta = div.firstChild;
text = ta.value;
return text.indexOf("\r") >= 0 ? "\r\n" : "\n";
}
Это работает, потому что браузеры, которые используют \r\n
, преобразуют \n
на лету при разборе строки HTML. Здесь live running copy вы можете попробовать сами с любимыми браузерами.
Обновление: Ах, вы используете NodeJS. К сожалению, как и вы, я ничего не вижу об этом в документах NodeJS. NodeJS очень тесно связан с C/С++, а в C/С++ вы используете \n
для linebreak независимо от OS — в потоках, открытых в текстовом режиме, он преобразуется в конкретную версию ОС "на лету" (как чтение, так и запись). Но я не вижу поддержки текстовых файлов в NodeJS. Функция fs.open
не документирует флаг b
из fopen
(в противном случае он получил синтаксис этих флагов), и если вы посмотрите на источник, устанавливает _fmode
в _O_BINARY
на MinGW. Все это заставляет меня подозревать, что файлы находятся только в двоичном режиме. console.log
реализация использует \n
для новой строки, для чего это стоит.
Некоторые браузеры используют \n
, а некоторые используют \r\n
. Если вы хотите разделить текст на строки новой строки, просто используйте это:
lines = foo.value.split(/\r\n|\r|\n/);
Неа. В RegExp есть символы перевода строки (\n) и возврата каретки (\ r), но нет такой вещи, как свойство line.separator. Если мы говорим о клиентах js.
На это лучше всего ответить... подождите... StackOverflow! Если вопрос включает в себя одну функцию для определения символа прерывания строки, а ответ, связанный здесь, обеспечивает способ обнаружения платформы, а затем выводит символ прерывания платформы для использования в pre или textarea.
В браузере, как определить, какой вкус разрывов строк подходит для ОС?
Кроме того, вы можете найти хорошее объяснение того, как вне pre и textarea, JavaScipt конвертирует все разделители строк в \n
здесь: http://www.bennadel.com/blog/161-Ask-Ben-Javascript-Replace-And-Multiple-Lines-Line-Breaks.htm
Это сделало это для меня (хотя я сначала наткнулся на этот вопрос).
Разделитель независимой линии JavaScript Platform
function getLineBreakSequence() {
var div, ta, text;
div = document.createElement("div");
div.innerHTML = "<textarea>one\ntwo</textarea>";
ta = div.firstChild;
text = ta.value;
return text.indexOf("\r") >= 0 ? "\r\n" : "\n";
}
В этом вопросе речь идет о использовании Node.js, но этот ответ хорошо описывает перекрестный браузер и ситуацию с кросс-платформой.