2016-01-22 37 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) 
相关问题