在两个模式javascript之间提取数字

时间:2016-01-22 02:04:59

标签: javascript regex pattern-matching

我正在尝试从网址中提取一组数字。该字符串位于" region"和#34;所有"。 网址是: http://my.site.com/theme/feature/region/227-84/all/country-south

我建立的正则表达式是:

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

正则表达式正在提取数字的正确部分,但始终将区域粘贴到数字上,以便提取的字符串变为:

"region/227-84"

虽然我只想获得数字:

"227-84" 

2 个答案:

答案 0 :(得分:1)

它包含子字符串“region /”,因为正向前瞻(?=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

第一个捕获组的索引为1(即match ? match[1] : null)。在这种情况下,三元运算符只是用于在访问数组之前检查是否确实存在匹配(否则如果没有匹配则会抛出错误)。

答案 1 :(得分:0)

如果你已经知道你正在寻找的字符串的大小可以这样做:

......(?=\/all)