You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript通过正则提取iframe的frame name?

提取iframe的name属性值:正则表达式修正方案

没问题,我帮你修正正则表达式来获取目标frame name,直接看解决方案:


问题回顾

我希望从以下iframe字符串中提取frame name:

<iframe title="recaptcha challenge" src="https://www.google.com/recaptcha/api2/bframe?hl=en&amp;amp;v=v1526338122299&amp;amp;k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;amp;cb=ylg7rbi4vs61#4u0yaht3nqk" style="width: 100%; height: 100%; outline: 1px solid blue;" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox" name="4u0yaht3nqk" frameborder="0"></iframe>

我的当前JavaScript代码为:

var str = '<iframe title="recaptcha challenge" src="https://www.google.com/recaptcha/api2/bframe?hl=en&amp;amp;v=v1526338122299&amp;amp;k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;amp;cb=ylg7rbi4vs61#4u0yaht3nqk" style="width: 100%; height: 100%; outline: 1px solid blue;" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox" name="4u0yaht3nqk" frameborder="0"></iframe>';
var res = str.match(/name=/);
console.log(res);

预期输出为“4u0yaht3nqk”,但当前代码无法得到正确结果,请求仅使用正则表达式修正代码。


修正后的代码

var str = '<iframe title="recaptcha challenge" src="https://www.google.com/recaptcha/api2/bframe?hl=en&amp;amp;v=v1526338122299&amp;amp;k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&amp;amp;cb=ylg7rbi4vs61#4u0yaht3nqk" style="width: 100%; height: 100%; outline: 1px solid blue;" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox" name="4u0yaht3nqk" frameborder="0"></iframe>';
// 匹配双引号包裹的name属性值
var res = str.match(/name="([^"]+)"/)[1];
console.log(res); // 输出: 4u0yaht3nqk

为什么原代码不行?

你的原正则/name=/只能匹配到name=这个字符串片段,完全没有捕获后面的属性值内容,自然得不到预期结果。

正则说明

修正后的正则/name="([^"]+)"/逻辑很清晰:

  • name=":精准匹配属性名和开头的双引号
  • ([^"]+):捕获组,匹配所有非双引号的字符(也就是属性值本身)
  • ":匹配属性值结尾的双引号
  • 最后通过[1]提取捕获组里的内容,就是我们需要的frame name。

兼容单引号的进阶版本

如果需要兼容属性值用单引号包裹的情况,可以用更灵活的正则:

var res = str.match(/name=(["'])([^"']+)\1/)[2];

这里(["'])捕获开头的引号类型,\1确保结尾的引号和开头一致,[^"']+匹配属性值,最后用[2]提取目标内容。


内容的提问来源于stack exchange,提问作者TravelWhere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:29