正则表达式:匹配字符串后面的数字,但不包括该字符串

3

我正在尝试用JavaScript编写正则表达式,以匹配特定字符串后面的一系列数字,而不在结果中获取该字符串。到目前为止,我已经想出了以下内容:

(?!smart_id=)[0-9]+

需要测试的内容是与以下字符串匹配:

ksld8403smart_id=9034&kqwop
discid=783&smartid=83234&ansqw
fdsjfnfd3209sdf&smart_id=2102&hjg

但我得到了smart_id前后的两个数字。测试需要在 https://regexr.com/ 上进行。


这看起来像是一个查询参数字符串。使用库函数或内置语言函数提取这些值会更容易且减少错误的发生。 - ssc-hrep3
https://dev59.com/nHNA5IYBdhLWcg3wmfAa - ssc-hrep3
1
截至目前,JS RegExp中的后顾不是标准功能。在我的Chrome控制台中,/(?<=smart_id=)[0-9]+/.exec("smart_id=232134")[0]显示为"232134",但为了使其与其他浏览器和版本兼容,您需要使用/smart_id=(\d+)/.exec(str)[1]。因此,在regexr上,您将永远无法丢弃匹配左侧的一部分(直到它支持新的JS正则表达式语法)。 - Wiktor Stribiżew
1个回答

0

您可以在 array#map 中使用正则表达式。一旦匹配到结果,您可以在 = 处通过 array#split 拆分结果并获取第一个索引处的值。

var str = `ksld8403smart_id=9034&kqwop
discid=783&smartid=83234&ansqw
fdsjfnfd3209sdf&smart_id=2102&hjg`;

console.log(str.match(/(smart_id=)(\d+)/g).map(matched => +matched.split('=')[1]));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接