Javascript仅提取捕获组

时间:2017-08-07 17:23:36

标签: javascript regex capturing-group

我需要从字符串中提取id,但我不仅仅是ID。我正在尝试使用一种在Java中运行良好的模式,但在JS中它产生的结果比我喜欢的更多。这是我的代码:

var reg = new RegExp("&topic=([0-9]+)");

对字符串“#p = activity-feed& topic = 1697”

执行此操作时
var results = reg.exec("#p=activity-feed&topic=1697");

我希望得到数字部分(在这种情况下为1697),因为这之前是“& topic =”,但这会返回两个匹配项:

0: "&topic=1697"
1: "1697"

有人可以帮我从字符串["1967","9999"]获取"#p=activity-feed&topic=1697&no_match=1111&topic=9999"吗?

2 个答案:

答案 0 :(得分:1)

假设浏览器支持适合您的用例,URLSearchParams可以为您完成所有解析:

var params = new URLSearchParams('p=activity-feed&topic=1697&no_match=1111&topic=9999');
console.log(params.getAll('topic'));

答案 1 :(得分:0)

虽然Noah的答案可以说更加强大和灵活,但这是一个基于正则表达式的解决方案:

var topicRegex = /&topic=(\d+)/g; // note the g flag
var results = [];
var testString = "p=activity-feed&topic=1697&no_match=1111&topic=9999";
var match;
while (match = reg.exec(testString)) {
  results.push(match[1]); // indexing at 1 pulls capture result
}
console.log(results); // ["1697", "9999"]

适用于字符串中任意数量的匹配或位置。请注意,匹配仍然是字符串,如果您想将它们视为数字,则必须执行以下操作:

var numberized = results.map(Number);