2011-12-22 12 views
0
var name = unescape(decodeURIComponent(
    unescape(unescape(unescape(url))) 
    .replace(/\s/g, '+') 
    .replace(/^.*\/|\?.*$|\#.*$|\&.*$/g,'') || 
    url.replace(/.*\/\/|www./g,'') 
    .replace(/[^\w]+/g,'_') 
    .replace(/^_*|_*$/g,'')) 
).replace(/\+/g, ' '); 

上記のコードは、Web要素の名前を取得することですが、どのように動作するのか理解できないので、詳細を説明できますか?Javascriptを使用してWeb要素の名前を取得する

+2

正規表現の参照を見てください。 – alex

+2

「ウェブ要素」とはどういう意味ですか? –

+0

は、画像のようなウェブページ上の要素を意味します。 – chaohuang

答えて

2

詳細Regular Expressionsがあります。

Regular Expressionsがわからない場合は、最初に学習する必要があります。基本的には、このコードのすべてが正規表現を使用しているためです。たとえば、コード.replace(/\s/g, '+')は、文字列内のすべての空白文字を+シンボルに置き換えます。おそらくそれは、Google検索を使用するときにGoogleが常にあなたのために行うためです。

.replace(/^.*\/|\?.*$|\#.*$|\&.*$/g,'')は、最初の/の前のすべてを削除し、すべてのクエリも削除します。例えば、google.com/some/page.html?var=valuesome/page.html

decodeURIComponentPercent-Encodingでエンコードされた文字列を取り、通常の文字列にそれを向けるだろうjavascript関数であるになるであろう。

javascriptの||演算子は、左側のオペランドがtrueの場合は左側のオペランドを返し、そうでない場合は右側のオペランドの値を返します。この場合、作者がこの演算子を条件として使用しているように見えます。彼は最初に正規表現で文字列の一部を削除する前に、URLのエンコードを3回試みます。これを実行すると空の文字列が生成された場合、||演算子は右演算子の値を返し、最初にエンコードしないでregexの置換に直接ジャンプします。どうして?私はなぜ作者がこれをするのか分からないが、それは起こっていることだ。

他にもいくつか詳細がありますが、それは要点です。基本的には、何が起こっているのか本当に知りたい場合は、正規表現を学ぶべきです。

+0

こんにちは、Thr4wn、あなたの返事をありがとう、しかし私は2つの質問があります:なぜ著者はURLを3回エンコードしようとしました、そして、さらに 'decodeURIComponent'と' unescape'を使ってさらにエンコードしますか? 2.なぜ文字列中のすべての空白文字を '+'記号で置き換えるために '.replace(/ \ s/g、 '+')'を使用したのですか? '.replace(/ \ +/g、 '+'を空白で置き換えますか?どうもありがとうございました! – chaohuang

+0

Chaohuang、私は助けてうれしいです。しかし、さらに助けるために、私は入力がどのようになるか、このコードを見た場所と、Web要素が意味するものの例を必要とします。私はjsと正規表現に精通していますが、アプリケーションのドメインをよりよく知りたいのです。ありがとう。 –

+0

これらのコードは、「クラウド保存」と呼ばれるクロムエクステンションからのもので、画像を保存することなく、ウェブページからクラウドストレージ(Googleドキュメント、ドロップボックスなど)に直接保存することができますあなた自身のコンピュータはあなたの記憶にそれをアップロードします。 https://github.com/antimatter15/cloudsave/blob/master/cloudsave.js(111-118行目)の – chaohuang

関連する問題