Обнаружение скриптов: как найти нужный JS код

Раздел: JavaScript -> поиск в коде

Способы поиска JavaScript в коде

При работе с проектами часто требуется найти определённый JavaScript код: функцию, переменную, строку. Рассмотрим эффективные методы.

Как быстро найти все упоминания функции или переменной во всех файлах проекта?

Наиболее эффективное решение — использование утилиты grep с регулярными выражениями. Это позволяет искать по всем файлам в директории, игнорируя регистр и бинарные файлы.

grep -rn "myFunction" --include="*.js" .

Js found (найден javascript)

Пояснение: -r рекурсивно, -n выводит номера строк, --include="*.js" фильтрует только JS файлы, точка означает текущую директорию.

Для поиска всех вызовов console.log используйте регулярное выражение:

grep -rn "console\.\(log\|warn\|error\)" --include="*.js" .
src/app.js:12: console.log('начало');
src/utils.js:45: console.error('ошибка');

Частая ошибка:

не экранировать точку в регулярном выражении (без обратного слеша точка означает любой символ). Решение: используйте \..

Также возможна проблема с кодировкой, если файлы в UTF-16. Тогда используйте grep -r -a для обработки как текста.

Как найти строку в JavaScript коде через браузерные инструменты разработчика?

В Chrome DevTools можно нажать Ctrl+Shift+F (или Cmd+Shift+F на Mac) для поиска по всем загруженным файлам. Эта возможность полезна для отладки на работающем сайте.

// В панели Sources: Ctrl+Shift+F, ввести "fetch"

Результат покажет все вхождения во всех файлах, включая минифицированные.

Типичная ошибка:

поиск не находит данные, загруженные динамически или из Webpack. Решение: отключите фильтр "Ignore content scripts" или используйте поиск по всей странице (Ctrl+U).

Как проверить наличие определённой подстроки в JavaScript строке?

Для поиска в коде на JavaScript используются методы indexOf, includes, search, match, test. Например, чтобы узнать, содержит ли переменная str подстроку "error":

if (str.indexOf('error') !== -1) { ... }   // старый способ
if (str.includes('error')) { ... }          // ES6
if (str.search(/error/i) !== -1) { ... }   // регулярное выражение
if (/error/.test(str)) { ... }             // тест

Выбор зависит от требуемой точности. Для простого вхождения лучше includes, для шаблонов — test или match.

Распространённая ошибка:

забыть про -1 при использовании indexOf. В результате код ложно срабатывает. Используйте includes для избежания этой ошибки.

Как найти все вхождения подстроки с учётом регистра?

Методы indexOf и includes по умолчанию чувствительны к регистру. Для регистронезависимого поиска приведите обе строки к одному регистру:

str.toLowerCase().includes('error'.toLowerCase());

Или используйте регулярное выражение с флагом i:

/error/i.test(str);

Проблема:

преобразование к нижнему регистру может изменить оригинальный смысл (например, в URL). Лучше использовать регулярные выражения, если нужен точный поиск с игнорированием регистра.

Расширенные примеры поиска JavaScript

Дополнительные техники для глубокого анализа кода.

Пример 1: Поиск всех вызовов глобальных функций с помощью grep и обратных ссылок

Пример
grep -rnP "(\w+)\.\s*\(.*\)" --include="*.js" . | head -20

Ищет вызовы методов с именем, состоящим из букв, затем точка и скобки. Флаг -P включает Perl-совместимые regex.

src/main.js:5: app.init();
src/lib.js:15: utils.log('test');

Пример 2: Использование ripgrep (rg) для более быстрого поиска

Пример
rg -n "import.*from" --type js

Находит все импорты в JS файлах. ripgrep по умолчанию игнорирует .gitignore и работает быстрее grep.

src/index.js:1: import React from 'react';

Пример 3: Поиск уязвимостей с помощью регулярных выражений (eval, innerHTML)

Пример
grep -rn "eval\s*(" --include="*.js" .
grep -rn "innerHTML\s*=" --include="*.js" .

Полезно при аудите безопасности.

src/app.js:25: eval(result);
src/view.js:10: elem.innerHTML = data;

Пример 4: Поиск по AST с помощью инструментов вроде eslint или jscodeshift

Пример
# eslint правило: no-console
# jscodeshift -t transform.js src/*.js

Позволяет искать по структуре кода, а не по тексту, избегая ложных совпадений.

найден JavaScript - comments

En
Js found (javascript)