Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ alert( str.match(/\d+(?=€)/) ); // 30, число 1 проигнорирова

Обратим внимание, что проверка - это именно проверка, содержимое скобок `pattern:(?=...)` не включается в результат `match:30`.

При поиске `pattern:X(?=Y)` движок регулярных выражений, найдя `pattern:X`, проверяет есть ли после него `pattern:Y`. Если это не так, то игнорирует совпадение и продолжает поиск дальше.
При поиске `pattern:X(?=Y)` движок регулярных выражений, найдя `pattern:X`, проверяет, есть ли после него `pattern:Y`. Если это не так, то игнорирует совпадение и продолжает поиск дальше.

Возможны и более сложные проверки, например `pattern:X(?=Y)(?=Z)` означает:

Expand All @@ -31,11 +31,11 @@ alert( str.match(/\d+(?=€)/) ); // 30, число 1 проигнорирова
3. Проверить, идёт ли `pattern:Z` сразу после `pattern:X` (если нет - не подходит).
4. Если обе проверки прошли - совпадение найдено.

То есть этот шаблон означает, что мы ищем `pattern:X` при условии, что за ним идёт и `pattern:Y` и `pattern:Z`.
То есть этот шаблон означает, что мы ищем `pattern:X` при условии, что за ним идут и `pattern:Y`, и `pattern:Z`.

Такое возможно только при условии, что шаблоны `pattern:Y` и `pattern:Z` не являются взаимно исключающими.

Например, `pattern:\d+(?=\s)(?=.*30)` ищет `pattern:\d+` при условии, что за ним идёт пробел, и где-то впереди есть `30`:
Например, `pattern:\d+(?=\s)(?=.*30)` ищет `pattern:\d+` при условии, что за ним идёт пробел, и где-то далее есть `30`:

```js run
let str = "1 индейка стоит 30€";
Expand Down