Перенос строки в json файле
Я должен сформировать строку JSON, в которой значение имеет символ новой строки. Это должно быть экранировано, а затем опубликовано с помощью вызова AJAX. Может ли кто-нибудь предложить способ избежать строки с помощью JavaScript. Я не использую jQuery.
Я пытался экранировать символ новой строки \ n в \\ n. Работает нормально. Но я ищу любую библиотеку JS, которая может сделать это для всех escape-символов.
Зачем вам нужно экранировать строки в JSON? Как эти значения декодируются, когда они используются, потому что подходящим решением является использование связанной функции кодирования.
я потратил 6 часов, пробуя всевозможные вещи с множеством вариаций, но обнаружил, что крошечная дополнительная черта заставила бы все работать как по волшебству, то, что я считал трудным, заняло 5 минут . то, что мне показалось, стало невозможным. .omg
Когда вы используете Ajax-вызовы с php-db-save на стороне сервера, просто используйте php-функцию addlashes () для его преобразования. С этим решением у вас есть только одно место для преобразования, и оно чище, чем строки javascript-replace.
Возьми свой JSON и .stringify() все. Затем используйте .replace() метод и заменить все вхождения \n с \\n .
Насколько я знаю, нет известных библиотек JS для экранирования всех специальных символов в строке. Но вы можете связать .replace() метод и заменить все специальные символы следующим образом:
Но это довольно неприятно, не так ли? Введите всю прелесть функций в том, что они позволяют разбивать код на части и поддерживать чистоту основного потока вашего сценария без 8 цепочек .replace() вызовов. Итак, давайте поместим эту функциональность в функцию с именем escapeSpecialChars() . Давайте идти вперед и прикрепить его к prototype chain из String объекта, таким образом , мы можем назвать escapeSpecialChars() непосредственно на объекты типа String.
После того как мы определили эту функцию, основная часть нашего кода выглядит так просто:
Спасибо, Алекс. Я должен сделать это для всех escape-символов, верно? Есть ли библиотека JS для этого?
Согласно предложенному пользователю 667073, за исключением изменения порядка замены обратной косой черты и исправления замены кавычек
Как и вы, я просматривал несколько комментариев и публикацию, чтобы заменить специальные escape-символы в моем JSON, который содержит html-объект внутри.
Мой объект состоит в том, чтобы удалить специальные символы в объекте JSON, а также отобразить html, который находится внутри объекта json.
Вот что я сделал и надеюсь, что его очень просто использовать.
Сначала я сделал JSON.stringify мой объект json и JSON.parse результат.
И это решает мою проблему и сделано с использованием чистого Javascript.
попробуйте JSON.parse(JSON.stringify($("body"))) в HTML-файл с телом и несколько таблиц. $ ("body") является объектом javascript, но stringify не сможет его проанализировать.
Боюсь сказать, что ответ, данный Алексом, мягко говоря, неверен:
- Некоторым персонажам, которые Алекс пытается убежать, вовсе не обязательно бежать (например, & и ');
- \ b вовсе не символ возврата, а скорее совпадение границы слова
- Символы, необходимые для экранирования, не обрабатываются.
кажется, лучшее приближение.
на самом деле вы должны изменить порядок, чтобы заменить обратную косую черту перед двойными кавычками, иначе вы получите \\\\ ". Также строка кавычек должна быть .replace (/ [\"] / g, '\\\ "')
Небольшое обновление для одиночных кавычек
это старый пост но это все еще может быть полезно для тех, кто использует angular.fromJson и JSON.stringify. escape () устарела. используйте это вместо этого,
stringify уже делает все возможное для вас - мне интересно, почему бы просто не использовать это? git.io/vglq7
Существует также второй параметр в JSON.stringify. Итак, более элегантным решением будет:
Это старый вопрос, но решение не помогло мне, так как не помогло решить все вопросы. Я наконец нашел ответ, который сделал работу здесь
Я опубликую свое комбинированное решение как с использованием escape, так и кодирования компонента uri:
Может быть, потом удалить двойные кавычки вокруг строки? escape = (string) -> JSON.stringify(string)[1. -1]
Лучше использовать JSON.parse(yourUnescapedJson);
Используйте json_encode (), если ваш язык сценариев на стороне сервера - PHP, json_encode() экранирует символ новой строки и другие неожиданные для вас токены (если вы не используете PHP, найдите аналогичную функцию для вашего языка сценариев)
тогда используйте $.parseJSON() в своем JavaScript, готово!
Если передача данных из php в javascript в виде строки JSON, проверьте этот ответ - двойное экранирование, помогло мне передать JSON.parse и преобразовать строку json в объект. php JSON.parse двойное кодирование
Я попал в ту же ситуацию во время одного из моих вызовов Ajax, когда JSON выдает ошибку из-за новой строки в поле Textarea. Приведенное здесь решение не сработало для меня. Поэтому я использовал .escape функцию Javascript, и она работала нормально. Затем, чтобы получить значение JSON , я просто удалился с помощью .unescape .
Используя вызовы Ajax, я предпочитаю использовать php-функцию newStr = addlashes (str), а затем сохранять в db. Так что мне не нужно конвертировать на стороне javascript (клиента). С этим решением вам нужно только одно место для преобразования слешей. Я очень доволен этим решением.
Я использовал встроенный jQuery.serialize () для извлечения значения из текстовой области, чтобы urlencode ввода. Профессиональная часть заключается в том, что вам не нужно искать заменять каждый специальный символ самостоятельно, а я также сохраняю переводы строк и экранирование html. Чтобы сериализация работала, кажется, что поле ввода должно иметь атрибут name, но оно также добавляет тот же атрибут к экранированной строке, которую необходимо заменить. Может быть не то, что вы ищете, но это работает для меня.
Это дает достаточно подсказки для построения того, что кажется решением (требуется дополнительное тестирование): использовать rawurlencode на стороне PHP (отправляющий) для кодирования данных и unescape на стороне Javascript (принимающий) для декодирования данных. В некоторых случаях вы будете применять их ко всем текстовым строкам, в других случаях вы будете применять их только к значениям внутри JSON.
Если эта идея окажется верной, можно построить простые примеры, чтобы помочь программистам на всех уровнях решить эту проблему раз и навсегда.
Похоже, это действительно древний пост :-) Но, ребята, лучший способ обойти это, чтобы на 100% работать без сложного кода, это использовать обе функции кодирования / декодирования для base64. Это atob () и btoa (). Безусловно, самый простой и лучший способ, не нужно беспокоиться, если вы пропустили какие-либо символы, которые нужно экранировать.
Так как я придумал то же решение. Интересно, кто-то может прояснить это решение и есть ли какие-то скрытые предостережения? Спасибо.
Если ваши Googles продолжают высадить вас здесь, и ваш API выдает ошибки, если ваши двойные кавычки JSON не экранированы ( "" ), все, что вам нужно сделать, - это дважды преобразовать строку JSON.stringify(JSON.stringify(bar))
Используйте encodeURIComponent () для кодирования строки.
Например. var myEscapedJSONString = encodeURIComponent (JSON.stringify (myJSON));
Вам не нужно декодировать его, так как веб-сервер автоматически делает то же самое.
Никогда не используйте регулярные выражения (я имею в виду, как никогда). Лучший и эффективный способ:
Вы не можете сказать: «Никогда не используйте регулярные выражения (я имею в виду, как никогда вообще)». Каждый инструмент служит своей цели.
Ваш ответ действителен, вы просто выразили его очень самоуверенно, что может создать путаницу, особенно для юниоров.
Регулярные выражения @oncode невероятно бесполезны, независимо от того, как и когда их использовать. Это приводит только к неопределенному поведению и потере времени процессора.
It's mostly for visual comfort so I suppose I can just turn word wrap on in my editor, but I'm just kinda curious.
I'm writing some data files in JSON format and would like to have some really long string values split over multiple lines. Using python's JSON module I get a whole lot of errors, whether I use \ or \n as an escape.
structure your data: break the multiline string into an array of strings, and then join them later on.
10 Answers 10
JSON does not allow real line-breaks. You need to replace all the line breaks with \n .
"first line second line"
"first line\nsecond line"
for Python , this should be written as:
"first line\\nsecond line"
where \\ is for escaping the backslash, otherwise python will treat \n as the control character "new line"
-1 The OP is using the "\n" escape sequence. It's not working because they're not escaping the backslash, as "\\n", so Python is converting the escape sequence to a newline character rather than leaving it as literally a backslash followed by an en, as JSON requires.
@user359996 I'm not sure that's true. For me (storing data in JSON with just \n and outputting it via Curses), \n seems to work okay. It depends on the view/rendering engine, it seems.
@Nawaz: "\n" and "\r" are escape sequences for linefeed and carriage return, respectively. They are not the literal linefeed and carriage-return control characters. As an additional example to make it more clear, consider that "\\" is an escape sequence for backslash, as opposed to a literal backslash. The JSON grammar explicitly excludes control characters (cf. the "char" definition), and instead provides for their representation via escape sequences (\\, \r, \n, etc.).
@user359996: Yes.. I saw that later on, though I'm keeping my old comment as such, in case anybody else comes up with the same doubt, our discussion might help them. thanks for confirming it BTW.
Unfortunately many of the answers here address the question of how to put a newline character in the string data. The question is how to make the code look nicer by splitting the string value across multiple lines of code. (And even the answers that recognize this provide "solutions" that assume one is free to change the data representation, which in many cases one is not.)
And the worse news is, there is no good answer.
In many programming languages, even if they don't explicitly support splitting strings across lines, you can still use string concatenation to get the desired effect; and as long as the compiler isn't awful this is fine.
But json is not a programming language; it's just a data representation. You can't tell it to concatenate strings. Nor does its (fairly small) grammar include any facility for representing a string on multiple lines.
Short of devising a pre-processor of some kind (and I, for one, don't feel like effectively making up my own language to solve this issue), there isn't a general solution to this problem. IF you can change the data format, then you can substitute an array of strings. Otherwise, this is one of the numerous ways that json isn't designed for human-readability.
I've generated some JSON and I'm trying to pull it into an object in JavaScript. I keep getting errors. Here's what I have:
This gives me an error:
With JSON.parse(data) , I see similar error messages: " Unexpected token ↵ " in Chrome, and " unterminated string literal " in Firefox and IE.
When I take out the \n after sometext the error goes away in both cases. I can't seem to figure out why the \n makes eval and JSON.parse fail.
10 Answers 10
This is what you want:
You need to escape the \ in your string (turning it into a double- \ ), otherwise it will become a newline in the JSON source, not the JSON data.
This is of course correct, but I'd like to add the reason for having to do this: the JSON spec at ietf.org/rfc/rfc4627.txt contains this sentence in section 2.5: "All Unicode characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F)." Since a newline is a control character, it must be escaped.
+ 1. I was having trouble understanding JSON-encoding but "will become a newline in the JSON source, not the JSON data" made it clear for me.
People may think escaping \n is escaping \ (don't know how to quote \ in line. ) as \\ plus n . Actually, \n is a control character, denoted as \u000A as a unicode point. "\n" is exactly same as "\u000A" . So escaping \n is escaping \u000A . Its escaped form is \n , and we should write \ as \\ in Javascript string, which is why "\\n" is the right answer. For powershell, ` instead of \ is the escape character. New line character is denoted as `n . ConvertTo-Json "`n" will get "\n" , and ConvertFrom-Json ‘"Line 1\nLine 2"’ will get Line 1 and Line 2 in two lines.
You will need to have a function which replaces \n to \\n in case data is not a string literal.
Resulting dataObj will be
you need to escape your escape characters (i.e. .replace("\\n", "\\\\n") ) and I would also suggest using regex to allow replacing multiple instances (i.e. .replace(/\n/g, "\\\\n") )
why do you need to escape escape characters? I mean something like .replace("\n", "\\n") should do the job fine!! For example, var test = [<"description":"Some description about the product. This can be multi-line text.">]; console.log(JSON.parse(test.replace(/\n/g, "\\n"))); will output the object perfectly fine to browser console as [<"description":"Some description about the product.\nThis can be multi-line text.">]"description":"Some>
BTW, in above comment, original JSON string has a new line, which is removed by stackoverflow's comment formatter.. You can see that the final output after replace should insert a new-line char \n in the value.
-1 This answer first constructs a string of invalid JSON (since newline is a control character), then tries to fix it with a series of incomplete replacements (there are more than 3 control characters). Then to top it off, it also manages to use the eval function. 17 upvotes.
TLDR: A solution to the author's problem.
Use String.raw literal:
For some reason all answers inside here focus on how to parse a JSON string representation in JavaScript, which may cause confusion regarding how to represent newlines on actual JSON. The latter is not language-dependent.
Strictly based on the question title :
Conclusion 1:
To represent a newline inside a json file we should use the \n character. To represent the \n we should use \\n .
Conclusion 2:
To define a json string in javascript the easiest way would be to use String.raw , because it does not require any escaping (Well apart from backtick which is escaped like this String.raw`abc$def` ).
Of course, the easiest way to create json in javascript, in general, is to convert a javascript object to json (using JSON.stringify ).
This is true, however as @jerryurenaa pointed out you need to handle the whitespace wherever you display the json.
@tfantina The author question is about parsing. Rendering is a different thing. Parsing json may be in a context where no html view is available. What I wanted to point out in my answer is that in pure json newlines are represented like this: \n (by spec), while in a javascript string definition, json newlines need to be escaped: \\n . Finally a newline byte is not a valid character inside a json value of type string.
This answer explains how to handle new lines in .json files. although it is not the answer for the OP's question, a lot of people working with .json files are landing here
A string is a sequence of Unicode code points wrapped with quotation marks ( U+0022 ). All characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark ( U+0022 ), reverse solidus ( U+005C ), and the control characters U+0000 to U+001F . There are two-character escape sequence representations of some characters.
So you can't pass 0x0A or 0x0C codes directly. It is forbidden! The specification suggests to use escape sequences for some well-defined codes from U+0000 to U+001F :
- \f represents the form feed character ( U+000C ).
- \n represents the line feed character ( U+000A ).
As most of programming languages uses \ for quoting, you should escape the escape syntax (double-escape - once for language/platform, once for JSON itself):
Я сгенерировал немного JSON и пытаюсь превратить его в объект в JavaScript. Я продолжаю получать ошибки. Вот что у меня есть:
Это дает мне ошибку:
Когда я вынимаю \n после того, sometext как ошибка уходит в обоих случаях. Я не могу понять, почему \n делает eval и JSON.parse терпит неудачу.
Я думаю, это то, что вы хотите:
(Вам нужно экранировать «\» в вашей строке (превратив его в двойное - «\»), иначе он станет новой строкой в источнике JSON, а не данными JSON.)
Это, конечно, правильно, но я хотел бы добавить причину необходимости сделать это: спецификация JSON на ietf.org/rfc/rfc4627.txt содержит это предложение в разделе 2.5: «Все символы Юникода могут быть помещены в кавычки, за исключением символов, которые должны быть экранированы: кавычка, обратный солидус и управляющие символы (от U + 0000 до U + 001F). " Поскольку символ новой строки является управляющим символом, его необходимо экранировать.
Согласно www.json.org JSON принимает управляющую последовательность "\ n" в строках - и если вы попробуете JSON.parse (['"a \\ na"']) [1] .charCodeAt (); это покажет 10 - который был "Linefeed" последний раз, когда я проверял. --- Кстати: хватит кричать!
+ 1. У меня были проблемы с пониманием JSON-кодировки, но «станет новой строкой в источнике JSON, а не в данных JSON», и это прояснилось для меня.
Вам понадобится функция, которая заменяет \n на \\n случай, data если строковый литерал не является.
Итог dataObj будет
вам нужно экранировать свои escape-символы (то есть .replace("\\n", "\\\\n") ), и я бы также предложил использовать регулярные выражения, чтобы разрешить замену нескольких экземпляров (то есть .replace(/\n/g, "\\\\n") )
зачем вам бежать от побегных персонажей? Я имею в виду что-то вроде, .replace("\n", "\\n") должно хорошо делать работу! Например, var test = [<"description":"Some description about the product. This can be multi-line text.">]; console.log(JSON.parse(test.replace(/\n/g, "\\n"))); объект консоли будет отлично выводиться на консоль браузера как [<"description":"Some description about the product.\nThis can be multi-line text.">]"description":"Some>
Кстати, в приведенном выше комментарии исходная строка JSON имеет новую строку, которая удаляется средством форматирования комментариев stackoverflow. Вы можете видеть, что при окончательном выводе после замены в значение вставляется символ новой строки \n .
Строка - это последовательность кодовых точек Unicode, заключенная в кавычки ( U+0022 ). Все символы могут быть помещены в кавычки, кроме символов, которые должны быть экранированы: кавычка ( U+0022 ), обратный солидус ( U+005C ) и управляющие символы U+0000 в U+001F . Существуют двухсимвольные представления escape-последовательности некоторых символов.
Так что вы не можете передать 0x0A или 0x0C кодировать напрямую. Запрещено! Спецификация предлагает использовать escape-последовательности для некоторых четко определенных кодов от U+0000 до U+001F :
- \f представляет символ перевода формы ( U+000C ).
- \n представляет символ перевода строки ( U+000A ).
Поскольку большинство языков программирования использует \ для цитирования, вы должны избегать синтаксиса escape (double-escape - один раз для языка / платформы, один раз для самого JSON):
Я пишу некоторые файлы данных в формате JSON и хотел бы, чтобы некоторые действительно длинные строковые значения были разбиты на несколько строк. Используя JSON-модуль Python, я получаю массу ошибок, использую ли я \ или \n как выход.
Возможно ли иметь многострочные строки в JSON? Это в основном для визуального комфорта, поэтому я полагаю, что я могу просто включить перенос слов в моем редакторе, но мне просто любопытно .
структурируйте свои данные: разбейте многострочную строку на массив строк, а затем объедините их позже.
Попробуйте инструмент HJSON. Он преобразует вашу многострочную строку в формате json в правильный формат json.
JSON не допускает реальных разрывов строк. Вам нужно заменить все разрывы строк на \n .
"first line second line"
можно сохранить с помощью:
"first line\nsecond line"
ибо Python это должно быть записано как:
"first line\\nsecond line"
где \\ для экранирования обратной косой черты, в противном случае python будет рассматриваться \n как управляющий символ "новая строка"
-1 ОП в использовании «\ N» последовательности. Это не работает, потому что они не экранируют обратную косую черту , как "\\ n", поэтому Python преобразует escape-последовательность в символ новой строки, а не оставляет ее буквально с обратной косой чертой, за которой следует en, как того требует JSON.
@ user359996 Я не уверен, что это правда. Для меня (хранение данных в JSON с помощью just \n и вывод их через Curses), \n похоже, работает нормально. Кажется, это зависит от движка представления / рендеринга.
@Nawaz: "\ n" и "\ r" являются escape-последовательностями для перевода строки и возврата каретки, соответственно. Они не являются буквальными символами перевода строки и возврата каретки . В качестве дополнительного примера, чтобы сделать его более понятным, учтите, что «\\» является escape-последовательностью для обратной косой черты, в отличие от буквальной обратной косой черты. Грамматика JSON явно исключает управляющие символы (см. Определение «char») и вместо этого обеспечивает их представление через escape-последовательности (\\, \ r, \ n и т. Д.).
@ user359996: Да .. Я видел это позже, хотя я сохраняю свой старый комментарий как таковой, на случай, если кто-то еще возникнет с таким же сомнением, наше обсуждение может помочь им. спасибо, что подтвердил это.
Я должен был сделать это для небольшого проекта Node.js и нашел это обходным :
Это выглядит довольно опрятно для меня, судя по всему, я должен везде использовать двойные кавычки. Хотя в противном случае я мог бы, возможно, использовать YAML, но это имеет другие подводные камни и не поддерживается изначально. После разбора я просто использую myData.modify_head.join('\n') или myData.modify_head.join() , в зависимости от того, хочу ли я разрыв строки после каждой строки или нет.
Это решение для конкретного параметра, не обязательно связанного с вопросом. То, что вы создаете, это не многострочные строки (что в любом случае невозможно), а массивы со строками внутри
fgrieu - можно так же легко объединить строки без добавления новой строки. С этим небольшим изменением он обеспечивает обходной путь для многострочных строк (пока вы контролируете указание схемы JSON). Я постараюсь улучшить ответ с этим.
Спасибо, мне это нравится. Я собираюсь с этим для того, над чем я работаю. Это выглядит аккуратно и организованно. Я хочу, чтобы каждая новая строка в этом массиве подразумевала разрыв строки в выводимом тексте, хотя это решение может также работать в тех случаях, когда вы не вставляете разрывы строк. Я использовал это решение ранее в своем исходном коде javascript только потому, что мне понравилось, как оно выглядит организованно и как оно не оставляет никаких сомнений относительно того, какие пробелы попадают в финальную строку.
Несмотря на оговорки изобретателя JSON, я просто использовал это, чтобы добавить комментарии (без части javascript, но только [] и запятых), чтобы добавить комментарии, чтобы помочь будущему сопровождающему, который мог бы вручную отредактировать мой маленький файл JSON.
И что еще хуже, хорошего ответа нет.
Во многих языках программирования, даже если они явно не поддерживают разбиение строк по строкам, вы все равно можете использовать конкатенацию строк для получения желаемого эффекта; и пока компилятор не ужасен, это нормально.
Но JSON не является языком программирования; это просто представление данных. Вы не можете сказать это, чтобы объединить строки. Также его (довольно маленькая) грамматика не включает каких-либо средств для представления строки в несколько строк.
Если не считать какого-либо препроцессора (а мне, например, не хочется создавать собственный язык для решения этой проблемы), общего решения этой проблемы не существует. Если вы можете изменить формат данных, то вы можете заменить массив строк. В противном случае, это один из многочисленных способов, которыми json не предназначен для удобства чтения.
Проверьте спецификацию ! Производство символов в грамматике JSON может принимать следующие значения:
- any-Unicode-символ-кроме- " или- \ или-контроля-символа
- \"
- \\
- \/
- \b
- \f
- \n
- \r
- \t
- \u четыре шестнадцатеричные цифры номера
Символы новой строки являются «управляющими символами», поэтому нет, возможно, в вашей строке нет буквального символа новой строки. Однако вы можете закодировать его, используя любую комбинацию \n и \r вам нужно.
Это правильный ответ, так как он не оставляет двусмысленности. Новые линии будут разрешены, согласно спецификации, при условии , что они надлежащим образом спасся с характером управления.
@AliKhaki \ n в JSON не достигнет результата, к которому стремится вопрос. Либо вы думаете о чем-то другом (то есть о встраивании символов новой строки), либо говорите о новой строке в строковом литерале (содержащем JSON) на каком-то языке программирования, который опять-таки является чем-то другим.
JSON не позволяет разбивать строки для удобства чтения.
Лучше всего использовать IDE, которая будет для вас переносом строк.
Такой редактор, как BBEdit, который поддерживает «мягкую» перенос строки, идеален. Текст оборачивается так, что все это появляется в видимой области окна редактора, но в конце файла в файле сохраняются только те строки, которые вы вводите (например, ввод каретки). Облегчает редактирование JSON с очень длинными строками, не прибегая к хитростям или хитростям кода.
Это действительно старый вопрос, но я натолкнулся на это в процессе поиска и думаю, что знаю источник вашей проблемы.
JSON не допускает «настоящие» переводы строк в своих данных; он мог только избежать новых строк. Смотрите ответ от @YOU . В соответствии с вопросом, похоже, что вы пытались избежать разрывов строк в Python двумя способами: с помощью символа продолжения строки ( "\" ) или с помощью "\n" в качестве escape.
Но имейте в виду: если вы используете строку в Python, специальные экранированные символы ( "\t" , "\n" ) преобразуются в РЕАЛЬНЫЕ управляющие символы! "\n" будет заменен на управляющий символ ASCII, представляющий символ новой строки, который в точности является недопустимым в JSON. (Что касается символа продолжения строки, он просто выводит новую строку.)
Так что вам нужно сделать так, чтобы Python не экранировал символы. Вы можете сделать это, используя необработанную строку (поместите r перед строкой, как в r"abc\ndef" , или добавив дополнительную косую черту перед символом новой строки ( "abc\\ndef" ).
Оба вышеперечисленных вместо замены "\n" на реальный управляющий символ ASCII новой строки оставят "\n" два литеральных символа, которые затем JSON может интерпретировать как экранирование новой строки.
How do I handle newlines in JSON?
Let's say you parse a JSON file using the following code in node (it could be any language though):
Below is the output for each of the possible contents of file.json :
Input 1:
Output 1:
Input 2:
Output 2:
Input 3:
Output 3:
How would we define each of the above inputs using JavaScript (instead of input file):
When we need to define a string containing JSON in JavaScript, things change a bit because of the special meaning that \n has also for JavaScript. But also notice how String.raw literal fixes this.
Input1:
Input 2:
Input 3:
Читайте также: