Я знаю, что об этом много раз спрашивали. Я старался изо всех сил, но результат не был идеальным. Регулярное выражение /(\(\s*["[^`*************************************************************************************************************************** Ссылка: https: //regex101.com/r / ...

1
Faizan Anwer Ali Rupani 16 Фев 2021 в 15:09

3 ответа

Лучший ответ

Если вы хотите использовать регулярное выражение, вы можете изменить его с .* на [^)], чтобы оставаться в скобках

(\(\s*["[^']*]*)([^)]*\/logo\.png.*?)(["[^']*]*\s*\))

regex101

1
depperm 16 Фев 2021 в 12:17

Ты можешь использовать

(\(\s*(["']?))([^"')]*\/logo\.png[^"')]*)(\2\s*\))

См. демонстрацию регулярных выражений.

Подробности

  • (\(\s*(["']?)) - Группа 1: (, любой ноль или более пробелов, а затем Группа 2, захватывающая либо ', либо ", необязательно
  • ([^"')]*\/logo\.png[^"')]*) - Группа 3: любой ноль или более символов, кроме ", ' и ), затем строка /logo.png, а затем снова любой ноль или более символы кроме ", ' и )
  • (\2\s*\)) - Группа 4: то же значение, что и в группе 2, ноль или более пробелов и символ ).
1
Wiktor Stribiżew 16 Фев 2021 в 12:23

Проблема в вашем шаблоне в том, что .* слишком много совпадает. После открывающей круглой скобки вы должны исключить совпадение ( и ), чтобы совпали отдельные части.

Вам не нужны все эти группы захвата, если вы хотите сопоставить части в круглых скобках в целом.

Вы можете использовать 1 группу захвата, где группа будет обратной ссылкой, соответствующей той же необязательной закрывающей кавычке.

\(\s*(["']?)[^()'"]*\/logo\.png[^()'"]*\1\s*\)

Regex demo

Если вам также нужны совпадения без соответствующих кавычек:

\(\s*["']?[^()'"]*\/logo\.png[^()'"]*["']?\s*\)

Regex demo

1
The fourth bird 16 Фев 2021 в 12:39
66224060