匹配正则表达式 - JavaScript

时间:2015-06-26 17:45:53

标签: javascript regex node.js

所以我有以下网址:

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}"

为什么不捕捉令牌?

由于

4 个答案:

答案 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);

http://codepen.io/Chevex/pen/VLyaeG

答案 3 :(得分:-1)

试试这个:

var match = (/#\{(.*?)\}.*?#\{(.*?)\}/g.exec(oURL));