Javascript正则表达式返回捕获组值
我正在解析一个youtube URL,我想获取视频id,但我有一段非常艰难的时间 我唯一能想到的办法就是这个Javascript正则表达式返回捕获组值,javascript,regex,Javascript,Regex,我正在解析一个youtube URL,我想获取视频id,但我有一段非常艰难的时间 我唯一能想到的办法就是这个 href = 'https://www.youtube.com/watch?v=-UI86rRSHkg' ... video = href.replace(/^.*?youtube\.com\/.*?v=(.+?)(?:&|$).*/i, '$1'); 但我认为一定有更好的方法来做到这一点 如何在JavaScript正则表达式中获取捕获组的值?要获取匹配的信息,请使用Str
href = 'https://www.youtube.com/watch?v=-UI86rRSHkg'
...
video = href.replace(/^.*?youtube\.com\/.*?v=(.+?)(?:&|$).*/i, '$1');
但我认为一定有更好的方法来做到这一点
如何在JavaScript正则表达式中获取捕获组的值?要获取匹配的信息,请使用
String\match
:
var id = href.match(/\byoutube\.com\/[^?]*\?v=([^&]+)/i)[1];
为了使其更安全地使用:
var id = (href.match(/\byoutube\.com\/[^?]*\?v=([^&]+)/i) || [null, null])[1];
第二种方法适用于
?v=
在href
变量中缺失的情况。?据我所知,^.*youtube
中的?
是无用的,因为*
表示零次或多次,而?
表示它是可选的,这是多余的。@Nateowami?
在*
或+
之后意味着不贪婪,在后续模式中停止。因此,在我的例子中,像youtube.com…
(缺少模式和www
)这样的URL是有效的。好的,这一点很好。但是如果没有?
,它仍然会匹配没有scheme或www
的情况。这个问题使用youtube URL作为示例,但这个问题更一般,即Javascript正则表达式返回捕获组值
@Nateowami如果字符串不匹配,您将返回null而不是错误。