2016-01-22 33 views
1

我想從網址中提取一組數字。該字符串位於單詞「區域」和單詞「全部」之間。 URL是: http://my.site.com/theme/feature/region/227-84/all/country-south提取兩種模式之間的數字javascript

我所建立的正則表達式是:

var tmp = $(this).attr('link').match("(?=region/).*?(?=/all)"); 

正則表達式被提取的數字的正確部分但總是粘附的區域號碼,所提取的字符串成爲:

"region/227-84" 

雖然我wannt只得到的數字:

"227-84" 
+0

刪除向前看符號,並使用捕獲組。 –

+0

'match'返回一個數組,對吧?所以你不能'匹配(...)[1]'? – mariocatch

回答

1

它包括子字符串「region /」,因爲積極lookahead (?=region\/)與「region /」之前的字符匹配。由於JavaScript沒有lookbehinds,最簡單的辦法是去除向前看符號和以提取所述中間部分使用捕獲組:

/region\/([^\/]*)\/all/ 

,或者如果有圖案之間斜線:

/region\/(.*?)\/all/ 

用法:

var match = $(this).attr('link').match(/region\/([^\/]*)\/all/); 
var result = match ? match[1] : null; 

console.log(result); // "227-84" 

如果存在匹配,則.match()方法返回一個數組。在這種情況下,將返回:

["region/227-84/all", "227-84"] // match 

第一捕獲組具有的一個(即,match ? match[1] : null)的索引。在這種情況下,三元運算符僅用於在訪問數組之前檢查是否存在實際匹配(否則如果沒有匹配則會引發錯誤)。

+0

通過將數組鍵添加到初始正則表達式,將上述解縮爲一行:var match = $(this).attr('link')。match(「/ region \ /(。*?)\/all /」) [1]; – ronline

0

如果你已經知道字符串的大小,你正在尋找你可以這樣做:

......(?=\/all) 
相關問題