2013-08-29 52 views
0

我正在嘗試構建一個預先形成服務客戶端的書籤,但我並不真正流利使用Javascript。在我的代碼下面我想利用當前網頁的網址,並首先確認這是繼域名,這是經過特定格式的網址...Bookmarklet - 驗證URL格式並提取子字符串

/photos/[any alphanumeric string]/[any numeric string] 

是第三次後「/」應始終是數字字符串,我需要提取到一個變種。另外,我不能只是從最後開始並向後工作,因爲會有次數字串後面有另一個「/」,後面是其他我不需要的東西。

  1. 是indexOf()正確的函數來驗證url是否是特定的格式,我將如何編寫該表達式?我嘗試了幾個與indexOf()和Regex()相關的東西,但沒有成功。我似乎總是以意想不到的角色結束,或者它不起作用。

  2. 當然,我的問題的第二部分是我知道url是正確的格式,我該如何將數字字符串提取到變量?

謝謝你的幫助!

javascript:(function(){ 

// Retrieve the url of the current page 
var photoUrl = window.location.pathname; 

if(photoUrl.indexOf(/photos/[any alphanumeric string]/[any numeric string]) == true) { 
    // Extract the numeric substring into a var and do something with it 
} else { 
    // Do something else 
} 

})(); 

回答

0
var id = window.location.pathname.match(/\/photos\/(\w+)\/(\d+)/i); 
if (id) alert(id[1]); // use 1 or 2 depending on what you want 
else alert('url did not fit expected format'); 

(編輯:首先改變\d*\w+和第二\d*\d+和到id。)

+1

第一次捕獲的值實際上應該是(\ w +) – Christophe

+0

謝謝DG的快速響應和更簡單的方法。並感謝@Christophe,這是一個必要的調整。 完美的作品! –

+0

感謝您的糾正。我更新了代碼。 –

0

爲了測試模式串並得到他們的部分,你可以使用regular expressions。 Exression你的標準會是這樣的:

/^\/photos\/\w+\/(\d+)\/?$/ 

它將匹配開始/照片/任意字符串,然後通過任何字母數字字符(和下劃線),其次是任意數量和可選/在包裹在捕獲組中的字符串結尾。

所以,如果我們這樣做:

"/photos/abc123/123".match(/^\/photos\/\w+\/(\d+)\/?$/) 

結果將是[ 「/照片/ ABC123/123」, 「123」]。您可能已經注意到,捕獲組是第二個數組元素。

即用功能:

var extractNumeric = function (string) { 
    var exp = /^\/photos\/\w+\/(\d+)\/?$/, 
     out = string.match(exp); 

    return out ? out[1] : false; 
}; 

你可以找到更詳細的例子here

因此,問題的答案:

是的indexOf(),以驗證該網址是特定 格式和右功能如何將我寫的表達?我已經嘗試了幾個 與indexOf()和Regex()相關的事情,但沒有成功。我似乎 總是以意想不到的角色結束,或者它不起作用。

的indexOf是不是這個職位的最佳選擇,你是對使用正則表達式,但缺乏經驗,這樣做。

當然我的問題的第二部分是,一旦我知道網址是 正確的格式,我如何提取數字字符串轉換成一個變量?

正則表達式連同match函數將允許測試所需格式的字符串並同時獲取它的部分。

+0

謝謝你的教育提示!有直接的答案是很好的,但我也很感謝他解釋如何和爲什麼。再次感謝! –