私は現在、リクエストを受信し、レスポンスを返信できるWebサーバーを構築しています。Googleのv8JavaScriptエンジンのポートをc#(javascript.net)にプロジェクトに埋め込むことができました。要求されたファイルを解析し、その中でサーバー側のJavaScriptコードを実行したいと思います。このコードは、2文字の括弧内に含めることにしました。<:は開く場合、:>は閉じる場合です。私は自分が書いたコードでそれを解析し始めましたが、コードをより乱雑にし、おそらくあまり効率的ではないいくつかの問題に遭遇した後、先に進んでRegExを使用してみることにしました(これまで使用したことがないので勉強してもらいました)。ちょっと待って。それについて私の友人と話した後、彼は私にこの投稿を送ってくれましたXHTML自己完結型タグを除く正規表現一致オープンタグそれは良い考えではないことを理解しました...それで私の質問は、どうやってそのようなものを解析するのですか?(効率とクリーンなコードを考慮に入れると、結局のところ、それはWebサーバーです)。前もって感謝します!
質問する
142 次
2 に答える
0
私がよく理解しているなら、あなたはその中にある「<」と「>」、さらには「<」と「>」の間のすべてを取りたいですか?ええと...これには正規表現を使用できるので、最初に「<」を見つけて、次の「<」ごとに増加し、「>」ごとに減少するカウンターを作成してみてください。カウンターが0になり、次の ">"が表示されると、サーバー側スクリプトが終了します。HTMLが埋め込まれていて、それらを削除したい場合は、「""」などを検出してみてください。この解決策は遅いですが、私が想像できる最も単純なものです。
于 2013-02-10T22:31:28.230 に答える
0
理想的には、V8のレクサーに接続して、文字列などの内部にあるものを捕まえないようにすることをお勧めします。ただし、その.NETラッパーのソースを調べたところ、それほどカスタマイズできないようです。代わりに、小さなステートマシンを作成することをお勧めします。少なくとも次の状態が必要になる可能性があります。
- リテラルデータ(
<:
および:>
タグ以外のもの) - 左山かっこ(を消費
<
し、可能性を待っている場合:
) - スクリプトの状態(
<:
および:>
タグ内のもの) - スクリプトの二重引用符の文字列の状態
- スクリプトの二重引用符文字列のエスケープ状態
- スクリプトの一重引用符の文字列の状態
- スクリプトの一重引用符の文字列エスケープ状態
- スクリプトのスラッシュ状態(コメントおよび正規表現1の場合)
- スクリプト行のコメント状態
- スクリプトブロックコメント状態
- スクリプトブロックコメントスター状態
- スクリプトの正規表現の状態
- スクリプトのコロン状態(に遭遇し、次の何かが何
:
かわからない場合)>
正規表現ほど速く書くことはできないかもしれませんが、次のようなコードを処理することはできます。
Hello, world!
<:
document.write("At least you won't think the script :> ends there.");
:>
1考え直してみると、正規表現を検出するのはおそらくそれほど簡単ではありません。
于 2013-02-10T22:38:15.997 に答える