【发布时间】: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