変数や関数の使用されている場所を探すにはファイルを横断して検索を掛けるという方法が考えられます。正規表現を用いた正規表現によっていくらかは絞り込めますが、完璧に行うには正規表現のみでは力不足です。
変数名や関数名といった識別子を検索すれば、ある程度、変数や関数の使用されている場所を探すことができます。
このままではhogeやhogebも検索結果に含んでしまいます。識別子でない文字で括られていることを判断する正規表現で、余分な識別子を検索結果から弾きます。
[^a-zA-Z\$_]の部分は言語によって異なります。上記の正規表現はJavaScriptの規則に従っています。
JavaScript の識別子は必ずアルファベットかアンダースコア (_) かドル記号 ($) から始まらなくてはなりません。続く文字は数字 (0-9) も使えます。JavaScript は大文字・小文字を区別するため、使えるアルファベットは “A” から “Z”(大文字)と “a” から “z”(小文字)です。
引用 変数 – JavaScript | MDN
ざっくばらんに行うならこの方法で十分ですがこの方法には問題点があります。問題点はスコープを無視するという点と、変数と関数と文字列の区別をつけない、という点にあります。下の様なコードを検索した場合、一つ目の変数hogeの呼び出しカ所を知りたいのに、関数名hogeや文字列hoge、即時関数内のhogeを検索結果に含んでしまいます。
var hoge = 0;
console.log(hoge);
(function hoge(){
var hoge = 1;
console.log(hoge);
})();
console.log(' hoge ');
スコープを無視する、変数、関数の区別がつかない、という問題の単純な解決法は同名の識別子で宣言を行わないことです。固有な識別子をそれぞれが持つならば、このような問題は起こりません。