Подтвердить что ты не робот

Разделитель независимой линии платформы JavaScript

В JavaScript существует нечто похожее на Java System.getProperty("line.separator");?

Изменить: я использую среду без браузера JavaScript Node.js

4b9b3361

Ответ 1

У меня была та же проблема и наткнулся на этот довольно старый вопрос. После некоторого инвестирования я наконец нашел os.EOL в самом конце документации os.

var os = require('os')
console.log(JSON.stringify(os.EOL)) // prints "\n" on my Mac

JSON.stringify в этом случае важна, иначе вы увидите только пустую строку в консоли (что имеет смысл, потому что это то, что она должна делать). В обычном случае это не нужно.

Ответ 2

Не определено стандартным, нет. Раздел 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 для новой строки, для чего это стоит.

Ответ 3

Некоторые браузеры используют \n, а некоторые используют \r\n. Если вы хотите разделить текст на строки новой строки, просто используйте это:

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

Ответ 4

Неа. В RegExp есть символы перевода строки (\n) и возврата каретки (\ r), но нет такой вещи, как свойство line.separator. Если мы говорим о клиентах js.

Ответ 5

На это лучше всего ответить... подождите... StackOverflow! Если вопрос включает в себя одну функцию для определения символа прерывания строки, а ответ, связанный здесь, обеспечивает способ обнаружения платформы, а затем выводит символ прерывания платформы для использования в pre или textarea.

В браузере, как определить, какой вкус разрывов строк подходит для ОС?

Кроме того, вы можете найти хорошее объяснение того, как вне pre и textarea, JavaScipt конвертирует все разделители строк в \n здесь: http://www.bennadel.com/blog/161-Ask-Ben-Javascript-Replace-And-Multiple-Lines-Line-Breaks.htm

Ответ 6

Это сделало это для меня (хотя я сначала наткнулся на этот вопрос).

Разделитель независимой линии 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, но этот ответ хорошо описывает перекрестный браузер и ситуацию с кросс-платформой.