Javascript 正则表达式在生产中不匹配字符串,但在tester上工作
我有以下字符串:Javascript 正则表达式在生产中不匹配字符串,但在tester上工作,javascript,regex,Javascript,Regex,我有以下字符串:/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528。我试图获取第三个URL字符串,因此编写了以下正则表达式:/([^/]*)\w+/g。根据Regexr的说法,这应该是正确的 然后,我尝试使用Javascript访问第三个数组元素: var key = /([^/]*)\w+/g.exec('/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528')[2]; 然而,这是未定义的。如果打印结果
/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528
。我试图获取第三个URL字符串,因此编写了以下正则表达式:/([^/]*)\w+/g
。根据Regexr的说法,这应该是正确的
然后,我尝试使用Javascript访问第三个数组元素:
var key = /([^/]*)\w+/g.exec('/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528')[2];
然而,这是未定义的。如果打印结果(作为JSON),则会得到[“v0”,“v”]
有什么问题吗?第一个问题是在工作中使用了错误的工具 只要在
/
上拆分,就不需要正则表达式了
'/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528'.split('/')[3]; //0626df905120f6d6
现在,如果确实要使用正则表达式,请改用match
:
'/v0/lifts/0626df905120f6d6/refs/8f23576e6838b528'.match(/([^/]*)\w+/g) //["v0", "lifts", "0626df905120f6d6", "refs", "8f23576e6838b528"]
exec
仅在每次匹配有多个捕获组时才有用。您必须调用。exec
三次才能获得第三个匹配:更简单的regexps/\w+/g
或/[^/]+/g
也可以。但是我同意split
更适合解决这个问题,特别是如果您有空部件(例如/foo//bar/baz)。