匹配正则表达式-JavaScript
因此,我有以下url:匹配正则表达式-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.
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 weirdnessregexp.exec
将不会作为一个结果返回多个捕获组,即使使用了g
标志。但是,它会更新表达式的lastMatchIndex属性,以便您可以在循环中匹配字符串并提取所有捕获组内容。我已经尝试过它返回[“#{username}”,“#{token}”]我想要“username”和“token”而不是headif您选择此选项,您可以splice()
仅返回所需字符串部分的字符串。string.match
如果包含g
标志,则不返回捕获组。这很奇怪,但这就是它的工作原理。它只返回字符串中的多个匹配项。不带g
标志string.match
返回与regexp.exec
相同的结果。然后,为了结束JS weirdnessregexp.exec
将不会作为一个结果返回多个捕获组,即使使用了g
标志。但是,它会更新表达式的lastMatchIndex属性,这样您就可以在循环中匹配字符串并提取所有捕获组内容。它不应该是matches.push(match[1])?请更正它,我会将其标记为已解决!谢谢你的帮助:-)@Pasargad当然可以,如果你只想要第一个捕获组。它不应该是匹配的。推(匹配[1])?请更正它,我会将其标记为已解决!谢谢你的帮助:-)@Pasargad当然可以,如果你只想要第一个捕获组的话。