2012-03-13 1 views
0

私はジャバスクリプト/ jQueryのを使用して、このURLに含まれるデータから文字列を作成する必要があります:javascriptを使用してこのURLからデータを抽出するにはどうすればよいですか?

http://www.example.com/members/admin/projects/?projectid=41 

文字列が返され、次のようになります。

明らか
/ajax/projects.php?projectid=41 

現在何のクエリ文字列が存在しない場合、このメソッドは同じ形式の文字列からクエリ文字列を引き続き返す必要があります。例えば

http://www.example.com/members/admin/messages/ 

返す必要があります...

/ajax/messages.php 

私は多くの試みがなされてきた、すべてが原因の正規表現の私の貧弱な把握に成功せずに出会い、それは私が上ラジアン鉱石かのように感じています私は自分自身を混乱させています。

誰かが助けてくれれば助かります。

編集:URLの「管理者」部分はユーザーのユーザー名であり、何でもかまいません。

+0

私は間違っていない場合は、$アヤックスGET http://api.jquery.com/jQuery.get/を使用して、ことを申し訳@gdoronあなたmembers.phpページ – hellomello

+0

にそれを送ることができますミスタイプで、messages.phpを読み込んでいるはずです。 – gordyr

+0

ルールに従うのは難しい – charlietfl

答えて

1

は、あなたのURLを取り、あなたは上記したルールに従って、新しいものを返す関数です:

function processURL(url) { 
    var base = "", query = ""; 
    var matches = url.match(/([^\/\?]+)(\/$|$|\?|\/\?)/); 
    if (matches) { 
     base = matches[1]; 
     matches = url.match(/\?[^\?]+$/); 
     if (matches) { 
      query = matches[0]; 
     } 
    } 
    return("/ajax/" + base + ".php" + query); 
} 

そして、それはURLの束に取り組んで示したテストアプリ:http://jsfiddle.net/jfriend00/UbDfn/説明するの

Input URLs: 

var urls = [ 
    "http://www.example.com/members/admin/projects/?projectid=41", 
    "http://www.example.com/members/bob/messages/", 
    "http://www.example.com/members/jill/projects/", 
    "http://www.example.com/members/alice/projects?testid=99", 
    "http://www.example.com/members/admin/projects/?testid=99" 
]; 

Output results: 

/ajax/projects.php?projectid=41 
/ajax/messages.php 
/ajax/projects.php 
/ajax/projects.php?testid=99 
/ajax/projects.php?testid=99 

、最初の正規表現が探し:

a slash 
followed by one or more characters that is not a slash and not a question mark 
followed by one of the four sequences 
    /$ a slash at the end of the string 
    $  end of the string 
    ?  a question mark 
    /? a slash followed by a question mark 

この正規表現のポイントは、文字列の終わりまたはクエリパラメータの前に来るパスの最後のセグメントを取得し、最後のスラッシュがあるかどうか、およびクエリパラメータがあるかどうかを許容します。

+0

これはほぼ完璧なjfriend00に見えます...ありがとうございます。しかし、私はユーザー名が変更されることに言及しなかった、私が使用した例はユーザー名として 'admin'を持っていたが、それは何でもよい。私の謝罪は明確ではない。 – gordyr

+0

OK、それを処理できるリビジョンを作成します。数分待ってください。 – jfriend00

+0

@gordyr - 任意のユーザ名で動作するようにコードとテストケースが更新されました。 – jfriend00

1

私はあなたが何をしようとしているのか正確に知っています。これを行うには、あなたの文字列を疑問符で分割し、最後のアイテムフォームを使用するだけです。

var data = your_url.split('?'); 
var newUrl = '/ajax/projects.php' + (data.length > 1 ? data[length-1] : ""); 

あなたのURLがあります。

しかし、スクリプトを使用して同じURLを実行することは、パラメータIsAjax = trueを1つ追加し、コードビハインドでチェックして、ajaxロジックを実行するだけです。

$('#somelink').onclick(function(){ 
    $.ajax({ url: $(this).href, data { IsAjax: true } .... } 
}); 

この方法を使用すると、より堅牢なアプリケーションを使用できます。

+0

Senadさんのおかげで、2番目の例はまさに私が通常行うことです。しかし、私はこの場合にそうすることはできません。ここに理由はありませんが、私はこの純粋な顧客層を達成する必要があると言うことは言うまでもありません。あなたの最初の提案に関して。クエリー文字列を含まないURLでは疑問符で分割しても機能しませんか?しかし、提案をありがとう。 – gordyr

+0

はい、クエリ文字列なしで動作するようにスクリプトを更新しました。あなたのURLを呼び出しますが、エラーはありません。 –

0

私は

http://www.example.com/members/admin/messages/ 

によって返すべきであることを前提としています...

/ajax/members.php 

あなたは意味 - それはケーストライであれば...

/ajax/messages.php 

を返す必要があります

var query = url.split('?'); 
var paths = query[0].split('/'); 
var path = paths.pop(); 

if (path == '') //when there is trailing slash 
    path = paths.pop(); 

if (query.length == 1) //no query string 
    newurl = '/ajax/' + path + '.php'; 
else //query string 
    newurl = '/ajax/' + path + '.php?' + query[1]; 

私はそれがよりシンプルに、より良いことができると確信していますが、それはあなたにスタートを与えるかもしれません。ここで

0
var str = "http://www.example.com/members/admin/projects/?projectid=41"; 
var newStr = "/ajax/" + str.split("/").slice(-2).join(".php"); 
console.log(newStr); 
+0

多くのおかげでそれは素晴らしい作品!しかし、私はこれを答えてマークする前に、jfriend00のソリューションも動作しますが、正規表現を使用しています。私は現在、どのソリューションを使用するのが最善の方法であるかを検討しようとしています。 – gordyr

+0

このアルゴリズムは?の前にスラッシュが付いています。 'http://www.example.com/members/admin/projects?projectid = 41'のようなURLでは動作しません。これはおそらくそのページに到達するための有効なURLです。 – jfriend00

+0

jfriend00の説明をありがとう。 – gordyr

関連する問題