所以我有以下网址:
var oURL = "https://graph.facebook.com/#{username}/posts?access_token=#{token}";
我想从中获取用户名和令牌;
我试过了:
var match = (/#\{(.*?)\}/g.exec(oURL));
console.log(match);
但它给了我:
["#{username}", "username", index: 27, input: "https://graph.facebook.com/#{username}/posts?access_token=#{token}"
为什么不捕捉令牌?
由于
答案 0 :(得分:3)
问题是exec
只会在调用时返回给定索引的第一个匹配。
返回
如果匹配成功,
exec()
方法将返回一个数组并进行更新 正则表达式对象的属性。返回的数组有 匹配的文本作为第一个项目,然后每个项目一个项目 捕获匹配包含文本的括号 捕获。如果匹配失败,
exec()
方法将返回null。
你需要循环,再次连续匹配以找到所有匹配。
var matches = [],
match,
regex = /#\{(.*?)\}/g,
oURL = "https://graph.facebook.com/#{username}/posts?access_token=#{token}";
while (match = regex.exec(oURL)) {
matches.push(match)
}
console.log(matches)
但是,如果您只对第一个捕获组感兴趣,则只能将它们添加到matches数组中:
var matches = [],
match,
regex = /#\{(.*?)\}/g,
oURL = "https://graph.facebook.com/#{username}/posts?access_token=#{token}";
while (match = regex.exec(oURL)) {
matches.push(match[1])
}
console.log(matches)
答案 1 :(得分:1)
请改为尝试:
oURL.match(/#\{(.*?)\}/g)
答案 2 :(得分:0)
你接受的答案是完美的,但我想我还要补充说,创建一个像这样的辅助函数非常容易:
function getMatches(str, expr) {
var matches = [];
var match;
while (match = expr.exec(str)) {
matches.push(match[1]);
}
return matches;
}
然后你可以更直观地使用它。
var oURL = "https://graph.facebook.com/#{username}/posts?access_token=#{token}";
var expr = /#\{([^\{]*)?\}/g;
var result = getMatches(oURL, expr);
console.log(result);
答案 3 :(得分:-1)
试试这个:
var match = (/#\{(.*?)\}.*?#\{(.*?)\}/g.exec(oURL));