2012-01-17 23 views
1

それが正規表現に来るとき、私はドアの爪よりも愚かだので、Firefoxの拡張機能を作成するときに私が助けを友人に尋ねたし、彼は私にこれを与えた:Javascriptを:正規表現の助けが必要としてください

if(doc.location.href.match(/(www\.google.*?[?&]q=[^&]+)/i)) 

が、AMO編集者はそれが広すぎると言って拒否しました(例えばhttp://uptime.netcraft.com/up/graph?site=www.google.comと一致します)。誰かが私に助けてくれる/私に次のものにマッチする正規表現を与えることができます:http(s)://www.google.tld/q=*

httpまたはhttps(通常と安全)とGoogleの後の任意のtldと一致する必要があります(.r u、.se、.fr、.inなど)

つまり、Google検索にのみ一致する必要があります。

ご協力いただきありがとうございます。 TLDのためのちょうど2-3の文字を想定し/ライアン・

答えて

2

(?:\.[a-z]{2,3}){1,2}があり、.com.auのようにこのような.co.ukなど

+0

多くの良い答えが、私はこれを選んだので、これを選んだので、 ありがとう! – Ryan

+0

これは非常に優れていますが、「q =」の前に[&\?]が必要であるため、実際にはURL例http://www.google.tld/q=*と一致しません。現実世界ではそれがあるので、おそらくエディタはここでは間違っています:) – eis

2
^https?://www\.google\.[a-z]{2,3}/q= 

は大丈夫でしょう。スラッシュ(/)の間に使用している場合は、この正規表現でエスケープしたいと思うでしょう。

0

何かに一致するように

/^https?:\/\/(?:www\.)?google(?:\.[a-z]{2,3}){1,2}\/.*[&\?]q=[^&]+?/i 

を試してみてください?

/https?:\/\/(www)?\.google\.[a-z]{2,3}\/[?&]q=.+/ 
+0

これは 'http://www.google.com/?client = something&q = query'を逃します –

+0

プロトコルとホスト名を作ることができます大文字と小文字を区別しませんが、 'q'はそうではありません。 –

1
var regex = /^https?:\/\/(www\.)?google\.[a-z]{2,3}\/([^/]*[\&]|[\?])q=.+$/i; 
1

追加^ます。https:?あなたはすでに

  • HTTPだけである

    • は^文字列の先頭にパターンを固定する必要があり、パターンの前に// http
    • 1または0のSさんのことを意味します。ただ、それ自体
    • バックスラッシュは

    をエスケープする必要がありますされるため、これは全体のパターンです:

    (^https?:\/\/www\.google.*?[?&]q=[^&]+) 
    

    私はあなたが持っているパターンについて好きなもの:それはTLDが2文字または3文字の長さであるとは想定していません。

  • 2

    正規表現を調整しないでください。それは維持できないでしょう - あなたが今日それで問題を見つけることができないなら、メンテナーは明日それに問題を見つけなければなりませんか?

    コアURLの構文が変更されないため、維持する必要のない正規表現を使用して、URLを適切に解析します。RFC 3986から

    次の行が破壊ダウン整形URI参照をその成分にするための正規表現です。

    ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 
    12   3 4   5  6 7  8 9 
    

    上記の2行目の数字は、読みやすくするためのものです。 これらは、各部分表現の参照ポイントを示します(つまり、それぞれ の対のかっこ)。部分式に一致する値 <n>$<n>と呼びます。

    $1 = http: 
    $2 = http 
    $3 = //www.ics.uci.edu 
    $4 = www.ics.uci.edu 
    $5 = /pub/ietf/uri/ 
    $6 = <undefined> 
    $7 = <undefined> 
    $8 = #Related 
    $9 = Related 
    

    あなたは次の操作を実行して、JavaScriptで、あなたのURLを確認することができ、という使い方:

    var match = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); 
    if (!match) { throw new Error('not a URL'); } 
    var url = { 
        protocol: match[2], 
        authority: match[4], // host, port, username, password 
        path: match[5], 
        query: match[6], 
        fragment: match[8] 
    }; 
    if (url.protocol !== 'http' && url.protocol !== 'https') { 
        throw new Error('bad protocol'); 
    } 
    if (!/^www.google.[a-z]+$/.test(url.authority || '')) { 
        throw new Error('bad host'); 
    } 
    if (!/[?&]q=/.test(url.query || '')) { 
        throw new Error('bad query'); 
    } 
    
    例えば、以下の部分式の試合で

    http://www.ics.uci.edu/pub/ietf/uri/#Related 
    

    結果に上記の式に一致します

    これはもっとコードですが、デバッグやメンテナンスがはるかに簡単で、ボーナスとして、URLがなぜ簡単であるのかを説明することができますmatic。

    関連する問題