我正在尝试从网址中提取一组数字。该字符串位于" 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"
答案 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)