final move to png

This commit is contained in:
Ilya Kantor 2015-04-18 01:40:37 +03:00
parent 0ed8583dc2
commit 90855e8899
43 changed files with 101 additions and 101 deletions

View file

@ -72,7 +72,7 @@ alert( "Я люблю HTML5!".match(/\s\w\w\w\w\d/) ); // 'HTML5'
Совпадение (каждому классу в регэкспе соответствует один символ результата):
<img src="love-html5-classes.svg">
<img src="love-html5-classes.png">
## Граница слова \b
@ -103,7 +103,7 @@ alert( "Hello, Javascript!".match(/\bJava\b/) ); // null
Например, в строке <code class="subject">Hello, Java!</code> под `\b` подходят следующие позиции:
<img src="hello-java-boundaries.svg">
<img src="hello-java-boundaries.png">
Как правило, `\b` используется, чтобы искать отдельно стоящее слово. Не на русском конечно, хотя подобную проверку, как мы увидим далее, можно легко сделать для любого языка. А вот на английском, как в примере выше или для чисел, которые являются частным случаем `\w` -- легко.

View file

@ -51,17 +51,17 @@ alert( str.match(reg) ); // "witch" and her "broom"
Движок регулярных выражений пытается сопоставить её на 0й позиции в строке, но символ `a`, поэтому на 0й позиции соответствия явно нет.
Далее он переходит 1ю, 2ю позицию в исходной строке и, наконец, обнаруживает кавычку на 3й позиции:
<img src="witch_greedy1.svg">
<img src="witch_greedy1.png">
</li>
<li>Кавычка найдена, далее движок проверяет, есть ли соответствие для остальной части паттерна.
В данном случае следующий символ шаблона: <code class="pattern">.</code> (точка). Она обозначает "любой символ", так что следующая буква строки <code class="match">'w'</code> вполне подходит:
<img src="witch_greedy2.svg">
<img src="witch_greedy2.png">
</li>
<li>Далее "любой символ" повторяется, так как стоит квантификатор <code class="pattern">.+</code>. Движок регулярных выражений берёт один символ за другим, до тех пор, пока у него это получается.
В данном случае это означает "до конца строки":
<img src="witch_greedy3.svg">
<img src="witch_greedy3.png">
</li>
<li>Итак, текст закончился, движок регулярных выражений больше не может найти "любой символ", он закончил повторения для <code class="pattern">.+</code> и переходит к следующему символу шаблона.
@ -71,7 +71,7 @@ alert( str.match(reg) ); // "witch" and her "broom"
Иными словами, он сокращает текущее совпадение на один символ:
<img src="witch_greedy4.svg">
<img src="witch_greedy4.png">
Это называется "фаза возврата" или "фаза бэктрекинга" (backtracking -- англ.).
@ -80,12 +80,12 @@ alert( str.match(reg) ); // "witch" and her "broom"
Если бы последним символом строки была кавычка <code class="pattern">'"'</code>, то на этом бы всё и закончилось. Но последний символ <code class="subject">'e'</code>, так что совпадения нет.</li>
<li>...Поэтому движок уменьшает число повторений <code class="pattern">.+</code> ещё на один символ:
<img src="witch_greedy5.svg">
<img src="witch_greedy5.png">
Кавычка <code class="pattern">'"'</code> не совпадает с <code class="subject">'n'</code>. Опять неудача.</li>
<li>Движок продолжает отступать, он уменьшает количество повторений точки <code class="pattern">'.'</code> до тех пор, пока остаток паттерна, то есть в данном случае кавычка <code class="pattern">'"'</code>, не совпадёт:
<img src="witch_greedy6.svg">
<img src="witch_greedy6.png">
</li>
<li>Совпадение получено. Дальнейший поиск по оставшейся части строки <code class="subject">is one</code> новых совпадений не даст.</li>
</ol>
@ -121,30 +121,30 @@ alert( str.match(reg) ); // witch, broom
<ol>
<li>Первый шаг -- тот же, кавычка <code class="pattern">'"'</code> найдена на 3й позиции:
<img src="witch_greedy1.svg">
<img src="witch_greedy1.png">
</li>
<li>Второй шаг -- тот же, находим произвольный символ <code class="pattern">'.'</code>:
<img src="witch_greedy2.svg">
<img src="witch_greedy2.png">
</li>
<li>А вот дальше -- так как стоит ленивый режим работы `+`, то движок не повторет точку (произвольный символ) ещё раз, а останавливается на достигнутом и пытается проверить, есть ли соответствие остальной части шаблона, то есть <code class="pattern">'"'</code>:
<img src="witch_lazy3.svg">
<img src="witch_lazy3.png">
Если бы остальная часть шаблона на данной позиции совпала, то совпадение было бы найдено. Но в данном случе -- нет, символ `'i'` не равен '"'.
</li>
<li>Движок регулярных выражений увиличивает количество повторений точки на одно и пытается найти соответствие остатку шаблона ещё раз:
<img src="witch_lazy4.svg">
<img src="witch_lazy4.png">
Опять неудача. Тогда поисковой движок увеличивает количество повторений ещё и ещё...
</li>
<li>Только на 5м шаге поисковой движок наконец находит соответствие для остатка паттерна:
<img src="witch_lazy5.svg">
<img src="witch_lazy5.png">
</li>
<li>Так как поиск происходит с флагом `g`, то он продолжается с конца текущего совпадения, давая ещё один результат:
<img src="witch_lazy6.svg">
<img src="witch_lazy6.png">
</li>
</ol>

View file

@ -84,7 +84,7 @@ alert( str.match(reg) ); // <span class="my">, span, s
Вот так выглядят скобочные группы:
<img src="regexp-nested-groups.svg">
<img src="regexp-nested-groups.png">
На нулевом месте -- всегда совпадение полностью, далее -- группы. Нумерация всегда идёт слева направо, по открывающей скобке.