renovations
This commit is contained in:
parent
2022aafc13
commit
dceccedb58
60 changed files with 1730 additions and 272 deletions
|
@ -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>
|
||||
|
||||
Теперь, зная общие методы, мы можем перейти к более подробному изучению синтаксиса регулярных выражений.
|
||||
Зная эти методы, мы уже можем использовать регулярные выражения.
|
||||
|
||||
Конечно, для этого желательно хорошо понимать их синтаксис и возможности, так что переходим к ним дальше.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue