匹配正则表达式-JavaScript

匹配正则表达式-JavaScript,javascript,regex,node.js,Javascript,Regex,Node.js,因此,我有以下url: 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.

因此,我有以下url:

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}"
为什么不抓到代币

谢谢

试试这个:

oURL.match(/\{(.*)\}/g)

尝试以下方法:

oURL.match(/\{(.*)\}/g)

问题是,每次调用时,只返回给定索引中的第一个匹配项

退换商品 如果匹配成功,则
exec()
方法将返回一个数组并进行更新 正则表达式对象的属性。返回的数组已被删除 匹配的文本作为第一个项目,然后每个项目对应一个项目 捕获匹配的括号,其中包含 被俘

如果匹配失败,则
exec()
方法返回null

您需要循环,不断地再次匹配以查找所有匹配项

var matches=[],
匹配,
正则表达式=/\{(.*)\}/g,
乌尔=”https://graph.facebook.com/#{username}/posts?访问_令牌=#{token}”;
while(match=regex.exec(oURL)){
火柴。推(火柴)
}
log(matches)
问题是每次调用时只返回给定索引中的第一个匹配项

退换商品 如果匹配成功,则
exec()
方法将返回一个数组并进行更新 正则表达式对象的属性。返回的数组已被删除 匹配的文本作为第一个项目,然后每个项目对应一个项目 捕获匹配的括号,其中包含 被俘

如果匹配失败,则
exec()
方法返回null

您需要循环,不断地再次匹配以查找所有匹配项

var matches=[],
匹配,
正则表达式=/\{(.*)\}/g,
乌尔=”https://graph.facebook.com/#{username}/posts?访问_令牌=#{token}”;
while(match=regex.exec(oURL)){
火柴。推(火柴)
}
console.log(匹配项)
尝试以下操作:

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

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

您接受的答案是完美的,但我想我还要补充一点,创建这样的小助手函数非常容易:

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

您接受的答案非常完美,但我想我还要补充一点,创建这样的小助手函数非常容易:

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

“为什么不抓取令牌?”您所说的令牌是什么意思?这可能有助于显示您的期望。在结果集中匹配[1]=“username”,但我的其他匹配“token”如何?哦,糟糕,我以为您在谈论用户名的某个标记。我期望“username”和“token”;在其他owrds匹配中,“为什么不捕获令牌?”您所说的令牌是什么意思?这可能有助于显示您的期望。在结果集中匹配[1]=“username”,但我的其他匹配“token”如何?哦,糟糕,我以为您在谈论用户名的某个标记。我期望“username”和“token”;在其他OWRD匹配中,我已经尝试过它返回[“{username}”,“{token}”]我想要的是“username”和“token”,如果选择此选项,您可以
splice()
字符串以仅返回所需字符串的一部分。
string.match
如果包含
g
标志,则不返回捕获组。这很奇怪,但这就是它的工作原理。它只返回字符串中的多个匹配项。不带
g
标志
string.match
返回与
regexp.exec
相同的结果。然后,为了结束JS weirdness
regexp.exec
将不会作为一个结果返回多个捕获组,即使使用了
g
标志。但是,它会更新表达式的lastMatchIndex属性,以便您可以在循环中匹配字符串并提取所有捕获组内容。我已经尝试过它返回[“#{username}”,“#{token}”]我想要“username”和“token”而不是headif您选择此选项,您可以
splice()
仅返回所需字符串部分的字符串。
string.match
如果包含
g
标志,则不返回捕获组。这很奇怪,但这就是它的工作原理。它只返回字符串中的多个匹配项。不带
g
标志
string.match
返回与
regexp.exec
相同的结果。然后,为了结束JS weirdness
regexp.exec
将不会作为一个结果返回多个捕获组,即使使用了
g
标志。但是,它会更新表达式的lastMatchIndex属性,这样您就可以在循环中匹配字符串并提取所有捕获组内容。它不应该是matches.push(match[1])?请更正它,我会将其标记为已解决!谢谢你的帮助:-)@Pasargad当然可以,如果你只想要第一个捕获组。它不应该是匹配的。推(匹配[1])?请更正它,我会将其标记为已解决!谢谢你的帮助:-)@Pasargad当然可以,如果你只想要第一个捕获组的话。