我只是偶然发现了这种非常奇怪的行为。我有一个从嵌入式 iframe 中提取 Youtube 视频 ID 的正则表达式。正则表达式如下所示:
var regex = /(?:youtu\.be|youtube\.com|ytimg\.com|youtube-nocookie\.com).*(?:\/|\?v=|\&v=|\?video_id=|\&video_id=)([\w\-_]{11})[^\w\-_]?/ig;
我现在有一个嵌入式 Youtube iframe,如下所示:
<iframe id="ytplayer" type="text/html" width="300" height="200"
src="//www.youtube.com/embed/M7lc1UVf-VE?autoplay=0&origin=//example.com"
frameborder="0"/>
如您所见,该正则表达式应与src
该元素的属性匹配。但是,如果我执行以下代码,它将返回false
:
regex.test( $('#ytplayer').attr('src') );
你会说“好吧,你的正则表达式显然是错误的,再检查一次”。但是看看这个:
regex.test( $('#ytplayer').attr('src').toString() );
这将返回true
,即使它是完全相同的代码,只是添加了toString()
. 是的,.attr('src')
已经返回了一个字符串!为什么是这样?我可以在 Chrome 和 Firefox 中重现它,所以它很可能不是 JS 实现中的错误。
(你可以在这里找到一个 JsFiddle 来试试)