JavaScriptテキストからの引用された行の削除について

ソースコード分析プログラムの一部として、JavaScriptからすべての文字列リテラルを削除する必要がありました。 最初は、PHPに状態ベースのパーサーが実装されていましたが、遅くて鈍いものでした。 そして、正規表現の助けを借りてすぐに判明しました。



インスピレーションはstackoverflowの投稿でした。 その結果、次のソリューションが得られました。

return preg_replace('/(

"[^"\\\\]*(?:\\\\.[^"\\\\]*)*" # match double quoted string

|

\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' # match single quoted string

|

(?s:\\/\\*.*?\\*\\/) # multiline comments

|

\\/\\/.*?\\n # singleline comments

|

string.replace\\(\\/[^\\/\\\\]*(?:\\\\.[^\\/\\\\]*)*\\/ # an JS regexp

)/x', '', $str);







そして、これはアナライザーよりも何倍も速く、そのうち50行が忘却に沈んでいます。



All Articles