#javascript #regex #cypress #negative-lookbehind
#javascript #регулярное выражение #cypress #отрицательный внешний вид
Вопрос:
Мне нужно сопоставить все .get('asfd')
, но только в том случае, .wait(.*)
когда они не существуют заранее.
.wait(500).get('asdf') // shouldn't match
.asdf('asdf').get('asdf') // should match
К сожалению, отрицательный внешний вид не поддерживает кванторы, поэтому я не уверен, как описать пустоту между .wait(
и ).get('asdf')
для d*
Каков подход к сопоставлению этой не поддающейся количественному определению области?
Я полагаю, мне нужен какой-то способ описать, что за последним набором круглых скобок не было wait
, но есть ли простой способ сделать это?
Спасибо
Ответ №1:
Хорошо, потребовалось довольно много экспериментов, и этот вопрос помог прояснить ситуацию.
Ответ заключается в том, чтобы описать промежуточное: отделить от внешнего вида.
(?<!wait)
(?:([^)]*))
(.get(.*))
Этот второй раздел допускает любой символ до круглой скобки. Иногда первая скобка появляется внутри кавычек, и ее следует игнорировать. Без учета экранированных кавычек все мое регулярное выражение стало:
((?<!wait)(.*)s*)(.get((?:"[^"]*"|'[^']*')[^)]*))
И я использую его для вставки .wait()
до / после .get()
с группами соответствия 1 ( $1
) и 2 ( $2
)
$1.wait(234)$2.wait(234)
Комментарии:
1. Не было бы
.*(?<!wait)(?:(.*))(.get(.*))
?
Ответ №2:
Я не эксперт по регулярным выражениям, но как насчет этого?
/^(?!.wait(d )).*.get(.*)/g
Объяснение:
(?!
Отрицательный внешний вид.Указывает группу, которая не может совпадать после основного выражения (если оно совпадает, результат отбрасывается).
.
Экранированный символ. Соответствует символу «.» (код символа 46).
w
Символ. Соответствует символу «w» (код символа 119). Чувствителен к регистру.
a
Символ. Соответствует символу «a» (код символа 97). Чувствителен к регистру.
i
Символ. Соответствует символу «i» (код символа 105). Чувствителен к регистру.
t
Символ. Соответствует символу «t» (код символа 116). Чувствителен к регистру.
(
Экранированный символ. Соответствует символу «(» (код символа 40).
d
Цифра. Соответствует любому цифровому символу (0-9).
Квантификатор. Сопоставьте 1 или более предыдущих токенов.
)
Экранированный символ. Соответствует символу «)» (код символа 41).
.
Точка. Соответствует любому символу, кроме разрывов строк.
*
Квантификатор. Сопоставьте 0 или более предыдущего токена.
.
Экранированный символ. Соответствует символу «.» (код символа 46).
g
Символ. Соответствует символу «g» (код символа 103). Чувствителен к регистру.
e
Символ. Соответствует символу «e» (код символа 101). Чувствителен к регистру.
t
Символ. Соответствует символу «t» (код символа 116). Чувствителен к регистру.
(
Экранированный символ. Соответствует символу «(» (код символа 40).
.
Точка. Соответствует любому символу, кроме разрывов строк.
*
Квантификатор. Сопоставьте 0 или более предыдущего токена.
)
Экранированный символ. Соответствует символу «)» (код символа 41).