<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JavaScript: форматирование числа]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6823</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6823&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JavaScript: форматирование числа».]]></description>
		<lastBuildDate>Mon, 16 Apr 2012 16:52:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59414#p59414</link>
			<description><![CDATA[<p>На всякий случай предлагаю посмотреть в тему <a href="http://script-coding.com/forum/viewtopic.php?id=7049">HTA/JScript: Автоматический разбор параметров командной строки</a>.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 16 Apr 2012 16:52:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59414#p59414</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59385#p59385</link>
			<description><![CDATA[<p><strong>wisgest</strong></p><div class="quotebox"><cite>Serge Yolkin in #28 пишет:</cite><blockquote><p>Только кавычки мешаются.</p></blockquote></div><p>Т.е. при использовании match потребуется доп. операция - убрать из параметра (элемента массива) обрамляющие кавычки (если они там есть). Для всяких там fileExist, или getFile они будут мешать. А способ, предложенный <strong>Rumata</strong> убирает их автоматом, чем мне и понравился.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 16 Apr 2012 15:22:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59385#p59385</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59329#p59329</link>
			<description><![CDATA[<p>Продолжу оффтопик на тему разбора командной строки HTA.<br /></p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Уважаемый <strong>Rumata</strong> предложил абалденный алгоритм. Преобразование комстроки в массив параметров, практически, занимает одну строчку</p></blockquote></div><p>Вы же сами в сообщении #28, используя метод <em>.match()</em>, уложились в единственный оператор! Я, правда считаю, что правильнее использовать другое регулярное выражение: </p><div class="codebox"><pre><code>var Args=CommandLine.match(/(?:&quot;[^&quot;]*(?:&quot;|\S)|\S)+/g);</code></pre></div><p>— строка разделяется по подряд стоящим пробельным символам, не заключаемым между нечётной и чётной кавычками, считая их от начала строки, т.е. если ближайшая слева (для пишущих слева направо <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />) кавычка чётная, то пробельный символ не включается ни в какой из параметров, в противном случае — включается; в случае нарушения чётности числа кавычек — пробельные символы в конце строки теряются.</p><p>Такое же разделение за исключением того, что при нарушение чётности числа кавычек пробельные символы в конце строки будут не теряться, а включаться в последний параметр: </p><div class="codebox"><pre><code>/(?:&quot;[^&quot;]*(?:&quot;|)|\S)+/g</code></pre></div><p>Замечу, что если в рассматриваемой строке не будет найдено ни одного совпадения,<br />т.е если командная строка пустая, что возможно в зависимости от способа запуска HTA (например, при запуске по ссылке из IE (после подтверждения)),<br />или она состоит их одних лишь пробельных символов (чего в данном случае быть не должно)<br /><em>.match()</em> вернёт значение <em>null</em>; если же в любом случае нужен массив, хотя бы и пустой: </p><div class="codebox"><pre><code>var Args=CommandLine.match(regex)||[];</code></pre></div><p>--------<br />В случае, если аргументы командной строки пердставляют собой список разделённых пробельными символами имён файлов, некоторые из которых, возможно, заключены в кавычки и при этом, возможно, содержат пробелы, разбор командной строки по правилам предложенным мною и другими уважаемыми соучастниками (<strong>Serge Yolkin</strong>, <strong>Rumata</strong>), по всей вероятности, не будет различаться, но в общем случае может не совпадать (проверено).</p><p>Берусь утверждать, что моё правило более правильное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />, т.к:<br />• по тому же правилу (с выбрасываньем лишних пробельных символов в конце при нарушении чётности числа кавычек) разбирается командная строка в командных файлах CMD.EXE за исключением того, что запятые и точки с запятой в командной строке приравнены к пробельным символам;<br />• по тому же правилу (без выбрасывания лишних пробельных символов в конце при нарушении чётности числа кавычек) разбирается командная строка в сценариях WSH и консольных приложениях на MS Visual С/C++ 6.0 за исключением того, что после разбора из параметров удаляются все кавычки (не только внешние!!);<br />• тем же правилом руководствуется сам MSHTA.EXE выделяя из списка своих параметров первый — путь к приложению (и оставляя остальные на усмотрение этого приложения); при этом если путь открывается кавычкой, то кавычкой он должен и закрываться — эти внешние кавычки в путь не включаются, но внутри них могут быть и другие кавычки; также символы, в частности кавычки и пробелы, в пути можно заменять их escape-кодами — это можно использовать во избежание распадения пути на части и для соблюдения баланса кавычек — такие сложные пути могут быть при использовании, например, протокола «javascript:», чтобы в этом убедиться рассмотрите команды: </p><div class="codebox"><pre><code>mshta.exe javascript:&quot;Hello,   world!&quot;; А это уже дополнительные параметры
mshta.exe &quot;javascript:  alert ( &quot;Hello,%20world!%22);%20&quot;Текст, который будет выведен на странице&quot;;&quot;
mshta.exe &quot;javascript:  alert ( &quot;Hello,%20world!%22);%20&quot;Текст, который будет выведен на странице%22;&quot; А это уже дополнительные параметры
mshta.exe javascript:alert(&#039;&quot; - это кавычка&#039;); location.href; // А это всё ещё путь к приложению, а не его аргументы</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Mon, 16 Apr 2012 00:01:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59329#p59329</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58598#p58598</link>
			<description><![CDATA[<p>Поигрался. Уважаемый <strong>Rumata</strong> предложил абалденный алгоритм. Преобразование комстроки в массив параметров, практически, занимает одну строчку:</p><div class="codebox"><pre><code>while(r=re.exec(HTApp.commandLine)){pArr.push(r[1]||r[2]);}</code></pre></div><p>Причем, не важно - файлы там, или нет. Если скрипт (сценарий) требует дополнительный ключ ( [script].hta /a file.ext ... ) - ничего менять не надо, ключ будет в pArr[1]. И получение данных из такого массива не сложнее:</p><div class="codebox"><pre><code>while(pArr.length&gt;1){ // если есть доп. ключ - &gt;2
    processingFunction(pArr.pop());
}</code></pre></div><p>Не знаю, как посчитают уважаемые форумчане, а в свою коллекцию я это уже добавил. Управление hta из комстроки стало не сложнее, чем в wsf. Еще раз спасибо <strong>Rumata</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Fri, 30 Mar 2012 10:19:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58598#p58598</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58452#p58452</link>
			<description><![CDATA[<p><strong>Rumata</strong>, а твой пример гораздо круче, чем мой получился <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Я даже забыл, что такой простой код можно писать.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 27 Mar 2012 09:31:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58452#p58452</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58432#p58432</link>
			<description><![CDATA[<p><strong>Rumata</strong>, я то вроде бы разобрался с вашим хитрым выражением, с помощью книги по регсепам, но было тяжко.<br />Вы же изложили все очень ясно и доходчиво. Стало еще понятней. Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Tue, 27 Mar 2012 05:24:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58432#p58432</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58427#p58427</link>
			<description><![CDATA[<p><strong>Serge Yolkin</strong><br />Не за что. На счет любви - не знаю, но некоторые задачи с их помощью решаются очень лаконично и красиво. Главное не увлекаться и не злоупотреблять ими.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 26 Mar 2012 22:21:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58427#p58427</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58424#p58424</link>
			<description><![CDATA[<p><strong>Rumata</strong><br />Большое спасибо за разъяснение! Если бы вся инфа по регэкспам такая же внятная была - на них можно было бы в любви объяснятся <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />И за вариант спасибо. Но и со своими идеями ещё поиграюсь.</p><p>А кавычки я экранирую потому, что иначе Akel с моим оригинальным файлом подсветки регэкспы неправильно подсвечивает. Пока не поборол.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 26 Mar 2012 21:55:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58424#p58424</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58422#p58422</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>/(\&quot;[^\&quot;]+\&quot;)|(\S+)/g</p></blockquote></div><p>Экранировать кавычки не обязательно. </p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>разобрать параметры oHTA.commandLine</p></blockquote></div><p>как вариант:</p><div class="codebox"><pre><code>var re = /&quot;(.*?)&quot;(?:\s+|$)|([\S]+)/g;
var r;
while ( r = re.exec(s) ) {
    var arg = r[1] || r[2];
    alert(arg);
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 26 Mar 2012 21:39:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58422#p58422</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58421#p58421</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Поскольку обещанного рассказа пока не последовало</p></blockquote></div><p>Хм. Виноват. Забыл-с. Да и тема несколько &quot;поутихла&quot;. Коли Вы ее подняли, значит время поделиться рассказом. </p><p>Впервые об этой конструкции я узнал в контексте форматирования же чисел с разделением тысячей, например, 123456789 отформатировать в 123 456 789 (в русской традиции еще принято использовать точки, в то время как на западе принято выделять тысячи запятыми - 123,456,789). Все бы было легко и просто, но проблема заключается в поиске троек справа, то есть с конца строки. Для понимания этого регулярного выражения давайте его перепишем в стиле языка Perl, &quot;столбиком&quot;, и прокомментируем каждую значимую строку:</p><div class="codebox"><pre><code>/
	(?=			# &quot;заглянуть вперед&quot; и найти соответствие
		(?:		# без запоминания подстроки, 
			.{6}   # состоящей из 6 символов. 
		)+		 # возможно несколько таких подстрок
		$		  # до конца всей строки
	)
/</code></pre></div><p>Вся хитрость в том, что <strong>(?=шаблон)</strong>, &quot;заглядывая вперед&quot; ищет на соответствие шаблону, но найденное соответствие не запоминает, и поиск продолжается с позиции, следующей за найденным соответствием, без учета &quot;заглядывания вперед&quot;. Вот пример. </p><div class="codebox"><pre><code>
&#039;to be or not to be. To be or not to be.&#039;.match(/to be(?=\s)/ig)</code></pre></div><p>Данное регулярное выражение соответствует всем (модификатор g) вхождениям подстроки &quot;to be &quot;, &quot;To be &quot; без учета регистра (модификатор i), но не соответствует ни одному вхождению подстрок &quot;to be.&quot;. </p><p>В нашем же случае мы ищем подстроки, состоящие из 6 любых символов &quot;.{6}&quot;. И таких подстрок, идущих подряд&nbsp; до конца строки &quot;$&quot;, мы допускаем неограниченное количество - квантификатор &quot;+&quot;. Так как у нас указано, что найдя необходимое соответствие &quot;(?=)&quot; и не запоминая его, идти далее, то поиск продолжается со следующей, непосредственно ближайшей позиции в строке. </p><p>Таким образом, это регулярное выражение находит <em>все позиции между символами в строке</em>, где все символы сгруппированы по 6 символов, начиная с конца. </p><p>Еще одна иллюстрация:</p><div class="codebox"><pre><code>var s = &#039;0123456&#039;;
var re = /(?=(\d\d\d)+$)/g;

var t = s.replace(re, &#039; &#039;);

alert(s);
alert(t);</code></pre></div><div class="quotebox"><blockquote><p>Это регулярное выражение применяется к нулевой позиции в строке (перед символом &quot;0&quot;) - 012, 345, 6. Не подходит, потому что группы по 3 цифры должны идти до конца строки. <br />Переходим к следующей позиции (перед символом &quot;1&quot;) - 0, 123, 456. Соответствует. В этом месте вставляем замену - строку из одного пробела. <br />Переходим к следующей позиции - 01, 234, 56. Дальше - 012, 345, 6. <br />Доходим до 0123, 456. Подходит - вставляем еще один символ пробела и завершаем поиск, так как срока исчерпала себя.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 26 Mar 2012 21:23:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58421#p58421</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58420#p58420</link>
			<description><![CDATA[<p><strong>JSman</strong><br />Работает. И подход оригинальный - не сразу разобрался. Но хочется... красоты, что ли.<br />Вот, за два часа экспериментов сваял:</p><div class="codebox"><pre><code>var S=&#039;&quot;C:\\Utils\\check.hta&quot; file1.txt &quot;file1 - Копия.txt&quot; name3new.txt file.log &quot;filename archive.zip&quot;&#039;;

function GetArguments(ParamStr){
    return ParamStr.match(/(\&quot;[^\&quot;]+\&quot;)|(\S+)/g);
}

WScript.Echo(GetArguments(S));</code></pre></div><p>Только кавычки мешаются. И спать пора. Завтра еще поэкспериментирую. RegExp&#039;ы - великая сила. Или её тёмная сторона.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 26 Mar 2012 21:20:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58420#p58420</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58419#p58419</link>
			<description><![CDATA[<p><strong>Serge Yolkin</strong>, проверьте</p><div class="codebox"><pre><code>var S=&#039;&quot;C:\\Utils\\check.hta&quot; file1.txt &quot;file1 - Копия.txt&quot; name3new.txt file.log &quot;filename archive.zip&quot;&#039;;

function GetArguments(ParamStr)
{
    var flag = /^ *&quot;/.test(ParamStr)?1:0;
    var parts = ParamStr.replace(/^ *&quot;|&quot; *$/g,&quot;&quot;).split(&#039;&quot;&#039;),
    result=[];
    
    for (var i=0,l=parts.length,item=&quot;&quot;; i&lt;l; i++)
    {
        item = parts[i].replace(/^ *| *$/g,&quot;&quot;);
        if (i%2!=flag) result.push(&#039;&quot;&#039;+item+&#039;&quot;&#039;); else result.push(&#039;&quot;&#039;+item.replace(/ +/g,&#039;&quot;&quot;&#039;)+&#039;&quot;&#039;);
    }
    return result.join(&quot;&quot;).replace(/^ *&quot;|&quot; *$/g,&quot;&quot;).split(/&quot;&quot;/g); 
}

WScript.Echo(GetArguments(S));</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Mon, 26 Mar 2012 20:59:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58419#p58419</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58409#p58409</link>
			<description><![CDATA[<p>В данной ветке это оффтоп, но боюсь далеко отходить от такого колдунства:</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>/(?=(?:.{6})+$)/</p></blockquote></div><p>Поскольку обещанного рассказа пока не последовало, может, кто поможет разобрать параметры oHTA.commandLine:<br />&nbsp; &quot;C:\Utils\check.hta&quot; file1.txt &quot;file1 - Копия.txt&quot; name3new.txt file.log &quot;filename archive.zip&quot;<br />проблема в том, что имена с пробелами - в кавычках, а без пробелов - без кавычек. Сейчас разбираю в цикле (while): если первый символ (&quot;) отрезаем до следующей кавычки, иначе - до следующего пробела. В общем, работает, но, может, есть такой же изящный способ? Мои эксперименты пока результатов не дали...</p><p>В идеале надо получить массив:<br />&nbsp; pArr[0]=C:\Utils\check.hta<br />&nbsp; pArr[1]=file1.txt<br />&nbsp; pArr[2]=file1 - Копия.txt<br />&nbsp; ...</p><p>Если параметры не переданы, pArr.length=1 (только путь к .hta)</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 26 Mar 2012 19:08:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58409#p58409</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56959#p56959</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>У меня вопрос к <strong>smaharbA</strong>. С какой целью Вы показали это?</p></blockquote></div><p>Собственно я это тоже хотел спросить.&nbsp; Просто не так выразился.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Fri, 17 Feb 2012 07:42:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56959#p56959</guid>
		</item>
		<item>
			<title><![CDATA[Re: JavaScript: форматирование числа]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56957#p56957</link>
			<description><![CDATA[<p><strong>DnsIs</strong>, все верно. Коллега <strong>smaharbA</strong> показал, что результатом выполнения методов .split и .match являются массивы. Массив в JS это объект, чей конструктор - встроенная функция Array. </p><p>У меня вопрос к <strong>smaharbA</strong>. С какой целью Вы показали это?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 17 Feb 2012 07:29:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56957#p56957</guid>
		</item>
	</channel>
</rss>
