0

ここでの目的は字句解析ではないので、字句解析やコードの解析を提案しないでください。そして、「正規表現コメント」の質問の混乱に追加したことに対する私の謝罪ですが、最良の(最も投票された)悪い答え(質問に基づいて結果がどのように使用されるかという文脈を考えると)は不十分です(開始することはできましたが)そこから)そして私がレビューした他の回答の多くは、私がやろうとしていることとは単に無関係です.

ここで、原則として期待どおりに機能する正規表現を作成しました。


/(?:\n|^)(?:[^'"])*?(?:'(?:[^\\\r\n]|[\\]{2}|\\')*'|"(?:[^\\\r\n]|[\\]{2}|\\")*")*?(?:[^'"])*?(\/\*(?:[\s\S]*?)\*\/)/g

最後のグループは、上記の SO で参照されているように、ブロック コメントとよく一致します。

(\/\*(?:[\s\S]*?)\*\/)

実際の一致より前にあるものはすべて破棄されますが、有効なブロック コメント (つまり、文字列リテラルで検出されたものではない) と一致する目的で使用されます。

正規表現がブロック コメントのように見える場合は無視してください。

入力文字列は自由形式の JavaScript ではなく、lint されていると仮定します。


しかし、実際には、最初の一致で重複が発生し、他の一致は発生しません。

なんで?また、実際に機能するように修正するにはどうすればよいでしょうか?

ご協力いただきありがとうございます。また、質問が原因で発生する可能性のある問題についても、よろしくお願いいたします。:)

また、(コメントセクションで)以下の情報を考慮して、潜在的な落とし穴は大歓迎です。

直接の質問に関係のない追加情報: コード例で示唆されているように、最終的な目標は、ネストされた構造またはその他のコード構造を置換/縮小して、レキシカル スコープの上部にある変数宣言に焦点を当てることです。特定のコード パッチ - 変数宣言を巻き上げる目的で、特定のユース ケース用のテンプレートを生成します。負荷がかかるように聞こえるかもしれませんが、それは可能であり、比較的単純であると信じています-単純な交換で完全にではありませんが、それでもなお. 「可能な」とはどういう意味かを説明するために、正規表現、ブロック コメント、インライン コメント EDIT: および文字列リテラル /EDIT のみを折りたたんでから、{blocks} 内の変数スコープ (またはプレーン オブジェクト) のみを再帰的に折りたたむことをお勧めします (すべてのネストされたブロックを含まないもの) それらがなくなるまで、次に、何が残っているかを確認します。何らかの理由でこれが機能しないと思われる場合は、コメントでのみ返信してください。ありがとうございました!

4

1 に答える 1