2009-07-13 6 views
0

「キーワード」ハイライトスクリプトを作成しています。次のURLを解析する正規表現を作成して、強調表示するキーワードを検索する必要があります。Regex/Javascript Help - URLを検索する構文解析

私は正規表現で本当に悪いので、それを揺るがす人が助けてくれることを願っていました。

検索文字列はパラメータとして「skw」を使用し、用語を区切る「%2c」(カンマ)をスペースとして使用します。

例のURL:

http://[url].com/Search.aspx?skw=term1 http://[url].com/Search.aspx?skw=term1%2c+term2

私はそれが私にこのようになりますコレクションを与える使用することができ、単一の正規表現はありますか?

var "http://[url].com/Search.aspx?skw=term+one%2c+term2".match([Expression]); 

matches[0] = "term one" 
matches[1] = "term2" 

ありがとう!どんな助けでも大歓迎です。

答えて

1
https?://[^\?]+\?skw=([^%]*)(?:%2c\+*(.*))? 

JavaScriptでこれは

var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^%]*)(?:%2c\+*(.*))?/; 
var match = myregexp.exec(subject); 
if (match != null && match.length > 1) { 
    var term1 = match[1]; 
    var term2 = match[2]; 
} 

EDIT:

申し訳ありませんが、I再読み込みあなたはスプリット

var subject = "http://[url].com/Search.aspx?skw=term1+one%2c+term2"; 
var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^&]*)?/; 
var match = myregexp.exec(subject); 
if (match != null && match.length > 1) { 
    var terms = unescape(match[1]).split(","); 
} 
と組み合わせる必要があり、複数の条件を処理するために、あなたの質問に
+0

またはhttps?:// [^ \?] +(?:\?| \?[^&] *&)skw =([^%] *)( ?:%2c \ + *(。*))?あなたのskwの前にparamtersを無視する – cdm9002

+0

ありがとう!これは美しく働いた!! –

1

このタスクは本当に1つの正規表現には適していません。お手伝いするスクリプトについてはParsing Query Strings in JavaScriptをご覧ください。

+0

よりコンパクトな実装:http://magnetiq.com/2009/07/08/parsing-クエリ文字列パラメータを集計/ –

2

これは1つの試合では実行できませんが、一致、置き換え、分割で行うことができます:

url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ").split('%2c') 

マッチが失敗した場合は、別途マッチを行いたい場合があります(yur URLにskwパラメータがない場合に発生する可能性があります)。

あなたはおそらく、本当に、クエリ内の他のエスケープ文字を処理するために、あまりにもエスケープ解除をしたい

unescape(url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ")).split(',') 
+0

偉大な答え。カンマの後ろにスペースがあるように見えますが、私は彼がキャプチャしたくないと思っています。 (つまり、 "term1、term2"の場合は "[term1"、 "term2"])余分なスペースを削除する場合は、/、\ s * /に分割できます。 – Prestaul