Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式返回捕获组值_Javascript_Regex - Fatal编程技术网

Javascript正则表达式返回捕获组值

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

我正在解析一个youtube URL,我想获取视频id,但我有一段非常艰难的时间

我唯一能想到的办法就是这个

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而不是错误。