如何用正则表达式提取iframe中src的URL(不含转义引号)
解决iframe src URL提取时的多余字符问题
先看你的场景:你有一段带转义引号的iframe字符串:
let iframe = "<iframe src=\"https://player.vimeo.com/video/111111\" width=\"500\" height=\"281\" frameborder=\"0\" allowfullscreen></iframe>";
之前用/\bhttps?:\/\/\S+/匹配时,结果带了多余的\",这是因为\S+会匹配到所有非空白字符,包括转义后的引号(实际字符串运行时是普通引号)。
正确的正则方案
直接精准匹配src属性里的内容,这样能避免捕获多余字符:
// 正则匹配src="..."里的URL const srcRegex = /src="(https?:\/\/[^"]+)"/; const matchResult = iframe.match(srcRegex); // 提取捕获到的URL const targetUrl = matchResult ? matchResult[1] : null; console.log(targetUrl); // 输出: https://player.vimeo.com/video/111111
正则解释:
src=":精准定位到src属性的起始部分(https?:\/\/[^"]+):捕获组,匹配以http/https开头,直到遇到第一个双引号为止的所有字符([^"]+表示匹配任意非引号字符)- 这样就能完美避开后面的引号,拿到纯净的URL
为什么之前的[^\"]没成功?
你可能是在正则里错误地转义了引号——在JavaScript正则字面量中,不需要转义双引号(除非你是用字符串包裹正则),直接写[^"]就可以匹配非引号字符,转义后反而会干扰匹配逻辑。
更稳妥的非正则方案(推荐)
如果场景允许,用DOM解析来提取URL会更可靠(毕竟正则处理HTML容易踩各种格式坑):
const tempContainer = document.createElement('div'); tempContainer.innerHTML = iframe; const iframeElement = tempContainer.querySelector('iframe'); const cleanUrl = iframeElement.src; console.log(cleanUrl); // 同样得到目标URL
内容的提问来源于stack exchange,提问作者flimflam57
相关产品推荐
相关产品推荐

