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行が忘却に沈んでいます。


Source: https://habr.com/ru/post/J144567/


All Articles