Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Преобразование \n в перенос строки (https://javascript.ru/forum/css-html/31478-preobrazovanie-%5Cn-v-perenos-stroki.html)

Zlyden 09.09.2012 18:54

Преобразование \n в перенос строки
 
Пользователь вводит строку в поле ввода, содержащую последовательности \n, \r, и другие спецсимволы в виде текста. Надо, чтобы перед обработкой все последовательности заменялись на спецсимволы. К примеру, ввёл юзер "asdf\nasdf", и это воспринималось именно как
"asdf
asdf"
...а не "asdf\\nasdf". Есть какая-нибудь функция для такого преобразования, чтобы не создавать велосипед?

bes 09.09.2012 19:16

она?
<textarea></textarea>
<div></div>
<script>
var str = 'asdf\nasdf\nasdf\nasdf';
document.body.children[0].value = str;
document.body.children[1].innerHTML = str.replace(/\n/g, '<br>');
</script>

Aetae 09.09.2012 19:21

Неа, без использования доп элементов. Из безопасного разве что
alert(
  JSON.parse( 
    '"' + 
    prompt('str','asdf\\nasdf') 
    + '"'
  )
)

Или анализировать вручную.
Из опасного: eval и new Function.

Aetae 09.09.2012 19:23

Цитата:

Сообщение от bes (Сообщение 203828)
она?

Не оно, ибо:
<textarea></textarea>
<div></div>
<script>
var str = 'asdf\\nasdf\\nasdf\\nasdf';
document.body.children[0].value = str;
document.body.children[1].innerHTML = str.replace(/\n/g, '<br>');
</script>

bes 09.09.2012 19:54

alert(prompt('', 'asdf\\nadsf\\nasdf\\nadsf').replace(/\\n/g, '\n'));

Aetae 09.09.2012 22:03

Цитата:

Сообщение от bes (Сообщение 203839)
alert(prompt('', 'asdf\\nadsf\\nasdf\\nadsf').replace(/\\n/g, '\n'));

Это частный случай:
Цитата:

Сообщение от Zlyden (Сообщение 203817)
\n, \r, и другие спецсимволы


Zlyden 12.09.2012 23:07

Aetae,
Спасибо за первый пример. Правда, у него лишнее сообщение выводится, так что я сделал небезопасно:
var re = new RegExp(document.getElementById("regex").value, demoGetOpts());
var replacewith;
eval('replacewith = "'+ document.getElementById("replacement").value.replace('"','\\"') + '"');
document.getElementById("result").value = 
	document.getElementById("subject").value.replace(re, 
		replacewith);

bes,
Спасибо, но это уже "создавать велосипед"

Aetae 13.09.2012 00:07

Цитата:

Сообщение от Zlyden (Сообщение 204417)
Правда, у него лишнее сообщение выводится,

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


<input type="" id="replacement" value='\\\"; alert("хa-хa, было ваше стало наше");"'/>

<script type="text/javascript">
var replacewith;
eval('replacewith = "'+ document.getElementById("replacement").value.replace('"','\\"') + '"');
</script>

Zlyden 13.09.2012 01:28

<input type="" id="replacement" value='\\\"; alert("хa-хa, было ваше стало наше");"'/>

<script type="text/javascript">
var replacewith;
eval('replacewith = "'+ document.getElementById("replacement").value.replace(/([^\\]|^)((?:\\\\)*)"/g,'$1$2\\"') + '"');
</script>

Может, я не очень разбираюсь в javascript, но я умею писать регулярные выражения

Zlyden 14.09.2012 16:26

Вложений: 1
Кстати, именно скрипты для проверки регулярных выражений я и писал. Часто нужно их проверять, да и большие тексты мне нередко нужно ими обрабатывать. Выложу готовую страницу для тестов, может, кому пригодится.


Часовой пояс GMT +3, время: 18:45.