renovations

This commit is contained in:
Ilya Kantor 2015-03-06 17:10:55 +03:00
parent 2022aafc13
commit dceccedb58
60 changed files with 1730 additions and 272 deletions

View file

@ -8,7 +8,7 @@
[cut]
## str.search(regexp)
## str.search(reg)
Этот метод мы уже видели.
@ -25,11 +25,11 @@ alert( str.search( *!*/лю/i*/!* ) ); // 0
Нельзя заставить `search` искать дальше первого совпадения, такой синтаксис попросту не предусмотрен. Но есть другие методы, которые это умеют.
## str.match(regexp) без флага g
## str.match(reg) без флага g
Метод `str.match` работает по-разному, в зависимости от наличия или отсутствия флага `g`, поэтому сначала мы разберём вариант, когда его нет.
В этом случае `str.match(regexp)` находит только одно, первое совпадение.
В этом случае `str.match(reg)` находит только одно, первое совпадение.
Результат вызова -- это массив, состоящий из этого совпадения, с дополнительными свойствами `index` -- позиция, на которой оно обнаружено и `input` -- строка, в которой был поиск.
@ -68,7 +68,7 @@ alert( result.input ); // javascript - это такой язык
Позже мы ещё вернёмся к скобочным выражениям, они особенно удобны для поиска с заменой.
## str.match(regexp) с флагом g
## str.match(reg) с флагом g
При наличии флага `g`, вызов `match` возвращает обычный массив из всех совпадений.
@ -116,7 +116,7 @@ alert( str.match( /лю/gi ).length ) // ошибка! нет свойства l
```
[/warn]
## str.split(regexp|substr, limit)
## str.split(reg|substr, limit)
Разбивает строку в массив по разделителю -- регулярному выражению `regexp` или подстроке `substr`.
@ -136,7 +136,7 @@ alert( '12-34-56'.split('-') ) // [12, 34, 56]
alert( '12-34-56'.split(/-/) ) // [12, 34, 56]
```
## str.replace(regexp, newStr|function)
## str.replace(reg, str|func)
Швейцарский нож для работы со строками, поиска и замены любого уровня сложности.
@ -158,6 +158,7 @@ alert( '12-34-56'.replace("-", ":") ) // 12:34-56
alert( '12-34-56'.replace( *!*/-/g*/!*, ":" ) ) // 12:34:56
```
В строке для замены можно использовать специальные символы:
<table>
@ -271,7 +272,7 @@ alert( str.replace( /(Василий) (Пупкин)/ , replacer) ) // Пупк
Метод `test` проверяет, есть ли хоть одно совпадение в строке `str`. Возвращает `true/false`.
Работает, по сути, так же, как и проверка `str.search(regexp) != -1`, например:
Работает, по сути, так же, как и проверка `str.search(reg) != -1`, например:
```js
//+ run
@ -306,7 +307,7 @@ alert( str.search(*!*/javascript/i*/!*) != -1 ) // false
Он ведёт себя по-разному, в зависимости от того, есть ли у регэкспа флаг `g`.
<ul>
<li>Если флага `g` нет, то `regexp.exec(str)` ищет и возвращает первое совпадение, является полным аналогом вызова `str.match(regexp)`.</li>
<li>Если флага `g` нет, то `regexp.exec(str)` ищет и возвращает первое совпадение, является полным аналогом вызова `str.match(reg)`.</li>
<li>Если флаг `g` есть, то вызов `regexp.exec` возвращает первое совпадение и *запоминает* его позицию в свойстве `regexp.lastIndex`. Последующий поиск он начнёт уже с этой позиции. Если совпадений не найдено, то сбрасывает `regexp.lastIndex` в ноль.</li>
</ul>
@ -350,36 +351,38 @@ alert( regexp.exec(str).index ); // 49, поиск начат с 40й позиц
Методы становятся гораздо понятнее, если разбить их использование по задачам, которые нужны в реальной жизни.
<dl>
<dt>Для поиска только одного совпадения:</dt>
<dd>
<ul>
<li>Для поиска только одного совпадения:
<dl>
<dt>Найти позицию первого совпадения</dt>
<dd>`str.search(regexp)`</dd>
<dt>Найти само совпадение</dt>
<dd>`str.match(regexp)`</dd>
<dt>Проверить, есть ли хоть одно совпадение</dt>
<dd>`regexp.test(str)`, также можно использовать `str.search(regexp) != -1`</dd>
<dt>Найти совпадение с нужной позиции</dt>
<dd>`regexp.exec(str)`, начальную позицию поиска задать в `regexp.lastIndex`</dd>
</dl>
</li>
<li>Для поиска всех совпадений:
<dl>
<dt>Найти массив совпадений</dt>
<dd>`str.match(regexp)`, с флагом `g`</dd>
<dt>Получить все совпадения, с подробной информацией о каждом</dt>
<dd>`regexp.exec(str)` с флагом `g`, в цикле</dd>
</dl>
</li>
<li>Дополнительно:
<dl>
<dt>Для поиска-и-замены</dt>
<dd>`str.replace(regexp, str|func)`</dd>
<dt>Для разбивки строки на части</dt>
<dd>`str.split(regexp)`</dd>
</dl>
</li>
<li>Найти позицию первого совпадения -- `str.search(reg)`.</li>
<li>Найти само совпадение -- `str.match(reg)`.</li>
<li>Проверить, есть ли хоть одно совпадение -- `regexp.test(str)` или `str.search(reg) != -1`.</li>
<li>Найти совпадение с нужной позиции -- `regexp.exec(str)`, начальную позицию поиска задать в `regexp.lastIndex`.</li>
</ul>
</dd>
<dt>Для поиска всех совпадений:</dt>
<dd>
<ul>
<li>Найти массив совпадений -- `str.match(reg)`, с флагом `g`.</li>
<li>Получить все совпадения, с подробной информацией о каждом -- `regexp.exec(str)` с флагом `g`, в цикле.</li>
</ul>
</dd>
</dt>
<dt>Для поиска-и-замены:</dt>
<dd>
<ul>
<li>Замена на другую строку или функцией -- `str.replace(reg, str|func)`</li>
</ul>
</dd>
<dt>Для разбивки строки на части:</dt>
<dd>
<ul>
<li>`str.split(str|reg)`</li>
</ul>
</dd>
</dl>
Теперь, зная общие методы, мы можем перейти к более подробному изучению синтаксиса регулярных выражений.
Зная эти методы, мы уже можем использовать регулярные выражения.
Конечно, для этого желательно хорошо понимать их синтаксис и возможности, так что переходим к ним дальше.