<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: test() и exec() таки глючат или нет?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6872</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6872&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: test() и exec() таки глючат или нет?».]]></description>
		<lastBuildDate>Fri, 22 Jun 2012 11:55:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61103#p61103</link>
			<description><![CDATA[<p>Оказавшись в глубоком оффлайне сваял оффлайновый калькулятор. Горячие кнопы - Ctrl+i(g,m) - вкл/выкл i, g, m. Enter - посчитать. То же мышкой - клик на i, g, m; клик в поле Result. Резалтить можно многократно, пока не изменялся фокус (не кликалось в других полях). При запуске вставляет в поле String содержимое буфера. Чтобы строку руками не набирать. Делалось для себя на скорую руку. Форматирование страшненькое, поскольку работал на недобуке без мыша (экранчик маленький, а елозить по нему тачпадом - то ещё удовольствие).</p><div class="codebox"><pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
 &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
  &lt;title&gt;RegExp калькулятор&lt;/title&gt;
  &lt;meta http-equiv=&quot;MSThemeCompatible&quot; content=&quot;yes&quot; /&gt;
  &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=8&quot; /&gt;
  &lt;hta:application id=&quot;HTApp&quot; applicationName=&quot;ReXc-IXm&quot; border=&quot;dialog&quot;
   icon=&quot;%WinDir%\System32\calc.exe&quot; innerBorder=&quot;no&quot; scroll=&quot;no&quot; version=&quot;0.9&quot;/&gt;
  &lt;script type=&quot;text/jscript&quot; language=&quot;JScript&quot;&gt;
    self.resizeTo(640,480);
    self.moveTo(200,100);
  &lt;/script&gt;
  &lt;style type=&quot;text/css&quot;&gt;
   *{margin:0;overflow:hidden;padding:0;}
   fieldset{margin:0 6px;padding:2px 1%;white-space:nowrap;}
   legend{color:crimson;cursor:default;padding:0 6px;}
   p{color:navy;margin:3px;text-indent:3px;}
   select,#tv{color:maroon;width:75%;}
   textarea{border:none;font:normal 16px &#039;Times New Roman&#039;;overflow:auto;}
   .sq{color:maroon;font-weight:bold;}
   #bb{font:normal 18px Webdings;height:27px;
    margin-top:-9px;right:10px;width:25px;}
   #bb,#sa,#si,#st,#tv{position:absolute;}
   #be{cursor:default;height:8em;}
   #br{color:green;display:none;}
   #dg,#di,#dm{color:silver;cursor:hand;display:inline;
    font:bold 16px &#039;Courier New&#039;;}
   #dg,#di,#dm,#sx{vertical-align:top;}
   #ds{color:dimgray;margin-top:10px;text-indent:20px;}
   #sa{left:14em;}#si{left:21em;}
   #sr,#sx{font:normal 16px &#039;Courier New&#039;;min-width:0.3em;width:auto;}
   #sr,#sx,#ts{padding:0 2px;}#st,#tv{left:7em;}#si,#sx{color:blue;}
   #ts{color:navy;height:8em;width:100%;}#tv{height:4em;padding:0 4px;}
  &lt;/style&gt;
&lt;/head&gt;
&lt;body onload=&quot;sx.focus();&quot;&gt;
  &lt;fieldset onclick=&quot;sx.focus();&quot;&gt;
    &lt;legend&gt;regExp =&lt;/legend&gt;&lt;span class=&quot;sq&quot;&gt;/&lt;/span&gt;&lt;span id=&quot;sx&quot;
     onfocus=&quot;this.style.background=&#039;none&#039;;n=true;&quot; contentEditable&gt;&lt;/span&gt;&lt;span
      class=&quot;sq&quot;&gt;/&lt;/span&gt;
    &lt;div id=&quot;di&quot; onclick=&quot;fm(this);&quot;&gt;i&lt;/div&gt;&lt;div id=&quot;dg&quot;
     onclick=&quot;fm(this);&quot; style=&quot;margin-left:1px;&quot;&gt;g&lt;/div&gt;&lt;div id=&quot;dm&quot;
      onclick=&quot;fm(this);&quot; style=&quot;margin-left:3px;&quot;&gt;m&lt;/div&gt;&lt;button id=&quot;bb&quot;
       title=&quot;Копировать regExp в буфер&quot;
        onclick=&quot;window.clipboardData.setData(&#039;text&#039;,fr().toString());&quot;
         hideFocus&gt;¤&lt;/button&gt;
  &lt;/fieldset&gt;
  &lt;fieldset id=&quot;br&quot; onclick=&quot;sr.focus();&quot;&gt;&lt;legend&gt;Replace
   with:&lt;/legend&gt;&amp;emsp;&lt;span id=&quot;sr&quot; onfocus=&quot;n=true;&quot;
    contentEditable&gt;&lt;/span&gt;&lt;/fieldset&gt;
  &lt;fieldset onclick=&quot;ts.focus();&quot;&gt;&lt;legend&gt;String =&lt;/legend&gt;&lt;textarea id=&quot;ts&quot;
   onfocus=&quot;this.style.background=&#039;none&#039;;n=true;&quot;
    &gt;&lt;/textarea&gt;&lt;/fieldset&gt;
  &lt;div id=&quot;ds&quot;&gt;Method selection:&amp;emsp;
    &lt;select onchange=&quot;fs(this.value);n=true;&quot;&gt;
      &lt;optgroup label=&quot;&amp;emsp;RegExp Object Methods:&quot;&gt;
        &lt;option value=&quot;0&quot; &gt;&amp;emsp;Result =
         regExp.exec ( String ) ;&lt;/option&gt;
        &lt;option value=&quot;1&quot; &gt;&amp;emsp;Result =
         regExp.test ( String ) ;&lt;/option&gt;
      &lt;/optgroup&gt;
      &lt;optgroup label=&quot;&amp;emsp;String Object Methods:&quot;&gt;
        &lt;option value=&quot;2&quot; &gt;&amp;emsp;Result =
         String.match ( regExp ) ;&lt;/option&gt;
        &lt;option value=&quot;3&quot; &gt;&amp;emsp;Result =
         String.replace ( regExp, reWith ) ;&lt;/option&gt;
        &lt;option value=&quot;4&quot; &gt;&amp;emsp;Result =
         String.search ( regExp ) ;&lt;/option&gt;
        &lt;option value=&quot;5&quot; &gt;&amp;emsp;Result =
         String.split ( regExp ) ;&lt;/option&gt;
      &lt;/optgroup&gt;
    &lt;/select&gt;
  &lt;/div&gt;
  &lt;fieldset id=&quot;be&quot; onclick=&quot;fe();&quot;&gt;
    &lt;legend&gt;Result&lt;/legend&gt;
    &lt;p&gt;Result type:&lt;span id=&quot;st&quot;&gt;&lt;/span&gt;&lt;span id=&quot;sa&quot;&gt;lastIndex:&lt;/span&gt;&lt;span
     id=&quot;si&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr /&gt;
    &lt;p&gt;Result value:&lt;textarea id=&quot;tv&quot; readOnly&gt;&lt;/textarea&gt;&lt;/p&gt;
  &lt;/fieldset&gt;
&lt;/body&gt;
&lt;script type=&quot;text/jscript&quot; language=&quot;JScript&quot;&gt;
  var m=0,n=true,p,r,s;
  ts.innerText=window.clipboardData.getData(&#039;text&#039;);
  function fe(){
    if(n){
      st.style.color=&#039;blue&#039;;
      if(sx.innerText.replace(/\s/g,&#039;&#039;)==&#039;&#039;){
        sx.innerText=&#039;&#039;;sx.style.background=&#039;red&#039;;return;
      }
      r=fr();
      s=ts.innerText;
      n=false;
    }
    switch(m){
     case 0:p=r.exec(s);break;
     case 1:p=r.test(s);break;
     case 2:p=s.match(r);break;
     case 3:p=s.replace(r,sr.innerText);s=p;break;
     case 4:p=s.search(r);break;
     case 5:p=s.split(r);
    }
    try{
      st.innerText=typeof(p)==&#039;object&#039;?&#039;array (&#039;+p.length+&#039;)&#039;:typeof(p);
      si.innerText=r.lastIndex;
      tv.innerText=&#039;[&#039;+(typeof(p)==&#039;object&#039;?p.join(&#039;][&#039;):p)+&#039;]&#039;;
    }catch(e){st.style.color=&#039;crimson&#039;;st.innerText=&#039;Error!&#039;;tv.innerText=p;}
  }
  function fm(e){
    if(e.style.color==&#039;navy&#039;)e.style.color=&#039;silver&#039;;
    else e.style.color=&#039;navy&#039;;
  }
  function fr(){
    return(new RegExp(sx.innerText,(di.style.color==&#039;navy&#039;?&#039;i&#039;:&#039;&#039;)+
     (dg.style.color==&#039;navy&#039;?&#039;g&#039;:&#039;&#039;)+(dm.style.color==&#039;navy&#039;?&#039;m&#039;:&#039;&#039;)));
  }
  function fs(e){
    if(e==3)br.style.display=&#039;block&#039;;
    else br.style.display=&#039;none&#039;;
    m=~~e;
  }
  document.onkeydown=function(){
    if(event.keyCode==13){fe();return(false);}
    else if(event.ctrlKey){
      if(event.keyCode==73){fm(di);return(false);}
      if(event.keyCode==71){fm(dg);return(false);}
      if(event.keyCode==77){fm(dm);return(false);}
    }
  }
  document.body.onbeforepaste=function(){
    window.clipboardData.setData(
     &#039;text&#039;,window.clipboardData.getData(&#039;text&#039;).replace(
      /(&lt;\/?\w\d?[^&gt;]*&gt;)|\n|\r|\s+/g,&#039; &#039;
     )
    );
  }
&lt;/script&gt;
&lt;/html&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Fri, 22 Jun 2012 11:55:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61103#p61103</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58094#p58094</link>
			<description><![CDATA[<p><strong>max7</strong><br />голосую за - <a href="http://code.google.com/p/jsxt/source/browse/trunk/js/RegExp.js">RegExp#forEach()</a>, но против - RegExp#reset(), так как не возможно учесть всех нюансов и возможных хотелок. Проще пересоздать регулярное выражение.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 20 Mar 2012 06:30:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58094#p58094</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58091#p58091</link>
			<description><![CDATA[<div class="codebox"><pre><code>RegExp.prototype.reset = function() 
{ 
    this.lastIndex = 0;
    return this;
};

RegExp.prototype.forEach = function(str, fun, scope) 
{ 
    this.reset();
    for(var res = null; (res = this.exec(str)) != null;)
       if(fun.apply(scope, res) === false)
          break;
    return this;
};</code></pre></div><p>Пример:<br /></p><div class="codebox"><pre><code>var my_str = &quot;abracadabra 123.123.123.123,456.456.456.456; vinipuxivsevsevse - 789.789.789.789|098.098.098.098 56.56.56.56 traxtibidoxtibidox&quot;;

var my_regexp = (/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g);

my_regexp.forEach(my_str, function(str, first_parentheses)
{
   WScript.Echo(first_parentheses);
});</code></pre></div><p>Вывод соответственно:<br /></p><div class="codebox"><pre><code>123.123.123.123
456.456.456.456
789.789.789.789
098.098.098.098
56.56.56.56</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (max7)]]></author>
			<pubDate>Mon, 19 Mar 2012 22:33:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58091#p58091</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57476#p57476</link>
			<description><![CDATA[<p><strong>Rumata</strong>, я и говорю, на пустом месте сделали проблему.</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Mon, 05 Mar 2012 02:43:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57476#p57476</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57470#p57470</link>
			<description><![CDATA[<p><strong>Любитель</strong>, не могу сказать - не сталкивался с такой задачей. Рассматривайте использование глобального флага в <strong>.test()</strong> как последствия синонимичности метода вызову метода <strong>.exec() != null</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 04 Mar 2012 17:34:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57470#p57470</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57469#p57469</link>
			<description><![CDATA[<p>Идея понятна, только где такое реально применить?<br />Не вижу области применения.</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Sun, 04 Mar 2012 17:30:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57469#p57469</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57468#p57468</link>
			<description><![CDATA[<div class="quotebox"><cite>Любитель пишет:</cite><blockquote><p>мне не удалось придумать ни чего осмысленного</p></blockquote></div><p>Чтобы искать все соответствия шаблону. Например, так:<br /></p><div class="codebox"><pre><code>var s = &#039;1====2=======,==3,======4=5,=6=======,7=,8&#039;;
var re = /(\d+)/g;

while ( re.test(s) ) {
    alert(RegExp.$1);
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 04 Mar 2012 17:17:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57468#p57468</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57466#p57466</link>
			<description><![CDATA[<p>А мне кто нить скажет, зачем в test() использовать глобальный флаг? мне не удалось придумать ни чего осмысленного.</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Sun, 04 Mar 2012 17:05:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57466#p57466</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57442#p57442</link>
			<description><![CDATA[<p>Хабр, конечно, хорошо, но <em>в целом</em> уровень статей там очень низкий. </p><div class="quotebox"><cite>DnsIs пишет:</cite><blockquote><p>убедитесь, что на 100% понимаете</p></blockquote></div><p>О да, согласен. Но все мы люди и совершать ошибки это наша багофича )</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 04 Mar 2012 09:33:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57442#p57442</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57441#p57441</link>
			<description><![CDATA[<p>Rumata, спасибо за краткую справку, но я хотел сказать, что многие как раз пробегутся то такой вот краткой справке и тонкостей не замечают. Ваше 7 сообщение как раз это и показывает.<br />Я кстати до прочтения хабро-темы, тоже особо не задумывался и не вникал о работе всех вышеописанных функций. Мне пока хватало пары из их. Но после этой ветки форума, я таки прочту более вдумчиво мануалы.</p><p>Мораль сей темы такова, прежде чем писать о багах, сначала убедитесь, что на 100% понимаете как оно работает там. 8)</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 04 Mar 2012 06:48:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57441#p57441</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57424#p57424</link>
			<description><![CDATA[<div class="quotebox"><cite>DnsIs пишет:</cite><blockquote><p>суть javascript методов exec, search, test, match и точно знать чем они отличаются</p></blockquote></div><p>сопоставление строк заданному шаблону. Одни - методы экземпляров объекта RegExp, другие - String. Методов не так много. </p><p><strong>Обозначения</strong><br /></p><div class="quotebox"><blockquote><p>re - регулярное выражение<br />str - строка<br />r, m - результаты сопоставления</p></blockquote></div><p><strong>.match(), .exec()</strong><br /></p><div class="codebox"><pre><code>
m = str.match(re)
r = re.exec(str)</code></pre></div><p>Сопоставить и вернуть массив найденных подстрок или null в случае неудачи</p><p><strong>.test()</strong><br /></p><div class="codebox"><pre><code>
re.test(str)

// аналоги
re.exec(str) != null
str.match(re) != null</code></pre></div><p>Проверить на соответствие строки шаблону. Результат - true или false</p><p><strong>.search()</strong><br /></p><div class="codebox"><pre><code>
str.search(re)</code></pre></div><p>Проверить на соответствие строки шаблону и вернуть позицию первой найденной подстроки, или -1, если соответствий нет. </p><p><strong>Дополнительно</strong></p><div class="codebox"><pre><code>
str.replace(шаблон, замена)</code></pre></div><p>Метод поиска соответствия шаблону и замена найденной подстроки. В качестве шаблона может выступать как строка так и регулярное выражение. Замена - строка, или функция. </p><div class="codebox"><pre><code>
str.split(шаблон[, количество])</code></pre></div><p>Разбить строку на массив строк, используя в качестве разделителя шаблон. Необязательный параметр количество определяет количество сохраненных подстрок.</p><p>Обратил внимание, что в своем сообщении №7, в самом начале допустил&nbsp; ошибку. Исправил.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 03 Mar 2012 11:32:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57424#p57424</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57423#p57423</link>
			<description><![CDATA[<p><span style="color: Green"><strong>Любитель</strong>, <strong>Serge Yolkin</strong>, используйте <a href="http://forum.script-coding.com/help.php#bbcode">тэг «url»</a> для оформления ссылок на форуме.</span></p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 03 Mar 2012 11:18:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57423#p57423</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57422#p57422</link>
			<description><![CDATA[<p>Мне больше понравился http://regexpres.narod.ru/calculator.html</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 03 Mar 2012 10:08:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57422#p57422</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57417#p57417</link>
			<description><![CDATA[<p>Всем спасибо.</p><p>Вот только грабли это, или всё правильно?<br />Думаю всё правильно, нужно знать и уметь пользоваться. Просто на хабре сделали проблему вместо разъяснений реальности не очевидной для большинства. ИМХО.<br />Я бы такое долго искал, теперь главное вовремя про это вспомнить.:)</p><p>Ну и мои три копейки, на газировку с сиропом в автомате.</p><p>проверяет регулярные выражения<br />http://www.pagecolumn.com/tool/regtest.htm</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Sat, 03 Mar 2012 04:03:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57417#p57417</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: test() и exec() таки глючат или нет?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57302#p57302</link>
			<description><![CDATA[<p>Честно говоря, про слова jite я вспомнил после статьи на хабре - <a href="http://habrahabr.ru/blogs/javascript/112824/">&quot;регулярная ловушка&quot;</a> и мне подумалось, что он как раз таки хотел рассказать нам про аналогичные случаи. Но вы Rumata проницательны. 8)</p><p>Нужно просто более подробно вникнуть в суть javascript методов exec, search, test, match и точно знать чем они отличаются. Пойду ка перечитаю спецификацию.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Tue, 28 Feb 2012 02:46:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57302#p57302</guid>
		</item>
	</channel>
</rss>
