【问题标题】:Javascript extract only the capturing groupJavascript 仅提取捕获组
【发布时间】:2017-08-07 17:23:35
【问题描述】:

我需要从字符串中提取一个 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"

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

【问题讨论】:

  • 只需像这样索引返回的数组:var number = results[1];。附带说明一下,如果您想从一个字符串中获得多个匹配项,则需要在构建正则表达式时包含 g 标志。
  • "#p=activity-feed&topic=1697&no_match=1111&topic=9999".match(/topic=(\d*).*topic=(\d*)/).slice(1)
  • @JaredSmith 的解决方案可能是最简单的,但您正面临着落后的情况。如果您从正则表达式中删除括号,您将得到整个字符串,您可以删除 &topic= 部分。
  • 感谢大家的反馈。 @JaredSmith 您的解决方案有一个主要问题:我不知道位置“&topic=...”可能会出现,也不知道它出现了多少次。
  • @jcarias reg = /&topic=(\d+)/g;while(m = reg.exec("#p=activity-feed&topic=1697&no_match=1111&topic=9999")) console.log(m[1]); 记录 1697 和 9999。适用于任意数量的匹配项和字符串中的任何位置。

标签: javascript regex capturing-group


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多