Assertions

Проверка (assertion) задаёт возможность совпадения одним из указанных способов. Проверка может содержать условные выражения, опережающие (look-ahead) и ретроспективные (look-behind) проверки.

Типы

Примечание: Символ ? также может быть использован как обычный квантификатор.

Выражение Что означает
x(?=y) Опережающая проверка: x подходит только когда за x следует y. Например, /Jack(?=Sprat)/ сработает для "Jack" только когда за ним будет "Sprat". /Jack(?=Sprat|Frost)/ подойдёт для "Jack" только когда за ним будет "Sprat" или "Frost". Следует заметить, что ни "Sprat" ни "Frost" не будут выданы как часть проверки.
x(?!y) Отрицательная опережающая проверка: x подходит только когда за x не следует y. Например, /\d+(?!\.)/ сработает для числа в том случае, если за ним не стоит точка. Выполнение кода /\d+(?!\.)/.exec('3.141') выдаст только число "141", поскольку за "3" следует точка.
(?<=y)x Ретроспективная проверка: x подходит только когда x предшествует y. Например, /(?<=Jack)Sprat/ сработает для "Sprat" только если перед ним есть "Jack". /(?<=Jack|Tom)Sprat/ подойдёт для "Sprat" если перед ним будут "Jack" или "Tom". Заметим, что ни "Jack" ни "Tom" не будут выданы.
(?<!y)x Отрицательная ретроспективная проверка: x подходит только когда x не предшествует y. Например, /(?<!-)\d+/ сработает для числа в том случае, если перед ним не стоит знак минус. Выполнение кода /(?<!-)\d+/.exec('3') выдаст "3". Код /(?<!-)\d+/.exec('-3') ничего не найдёт, т.к. перед числом есть знак минус.