Как сопоставить отрицательный взгляд с неизвестными символами между? - PullRequest
0 голосов
/ 27 марта 2019

Мне нужно сопоставить все .get('asfd'), но только в том случае, если .wait(.*) заранее не существует.

.wait(500).get('asdf') // shouldn't match
.asdf('asdf').get('asdf') // should match

К сожалению, отрицательные просмотры не поддерживают квантификаторы, поэтому яя не уверен, как описать пустоту между .wait( и ).get('asdf') для \d*

Каков подход для сопоставления этой не поддающейся количественному определению области?

Полагаю, мне нужен какой-то способ описать, что за последним набором скобок не было wait, но есть ли простой способ сделать это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Хорошо, потребовалось немало экспериментов, и задание этого вопроса помогло прояснить ситуацию.

Ответ на опишите промежуточное: отдельно от опроса .

(?<!wait)
(?:\([^)]*\))
(\.get\(.*\))

Этот второй раздел допускает любой символ до круглых скобок. Иногда первая кавычка появляется внутри кавычек, и ее следует игнорировать. Не считая экранированных кавычек, все мое регулярное выражение стало:

((?<!wait)\(.*\)\s*)(\.get\((?:"[^"]*"|'[^']*')[^\)]*\))

И я использую его для вставки .wait() до / после .get() с группами совпадений 1 ($1) и 2 ($2)

$1.wait(234)$2.wait(234)

enter image description here

enter image description here

0 голосов
/ 27 марта 2019

Я не эксперт по регулярным выражениям, но как насчет этого?

/^(?!\.wait\(\d+\)).*\.get\(.*\)/g

Объяснение:

(?! Отрицательный взгляд. Указывает группу, которая не может соответствовать после основного выражения (если оно совпадает, результат отбрасывается).

\. Экранированный символ. Соответствует a "."символ (код символа 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).

...