优化正则表达式匹配域名在url
Optimising regex for matching domain name in url
我有一个匹配iframe url的正则表达式,并捕获各种组件。正则表达式在
下面给出/(<iframe.*?src=['|"])((?:https?:'/'/|'/'/)[^'/]*)(?:.*?)(['|"][^>]*some-token:)([a-zA-Z0-9]+)(.*?>)/igm
要清楚,我的实际要求是在html字符串中转换,如字符串
<iframe src="http://somehost.com/somepath1/path2" class="some-token:abc123">
<iframe src="http://somehost.com/newpath?token=abc123" class="some-token:abc123">
正则表达式的工作原理,因为它应该是,但对于正常长度的html,它需要大约2秒来执行,我认为是非常,高。
如果有人能告诉我如何优化这个正则表达式,我真的很感激,我确信我做了一些可怕的错误,因为在我使用这个正则表达式
之前/(<iframe.*?src=['|"])(?:.*?)(['|"][^>]*some-token:)([a-zA-Z0-9]+)(.*?>)/igm
完全取代源url,只添加参数,这只需要100毫秒
您不需要(也不应该)将iframe
元素解析为字符串;您只需要访问它的属性,并从中检索信息并重写它们。
function fix_iframe_src(iframe) {
var src = iframe.getAttribute('src');
var klass = iframe.getAttribute('class');
var token = get_token(klass);
src = fix_src(src, token);
iframe.setAttribute('src', src);
}
写下get_token
和fix_src
作为练习。
如果你想找到一堆iframe并将它们全部修复,那么
var iframes = document.querySelectorAll('iframe');
for (var i = 0; i < iframes.length; i++) {
fix_iframe_src(iframes[i]);
}
顺便说一下,您的class
属性的值似乎被破坏了。我怀疑它是否会匹配任何CSS规则,如果这是意图的话。除了提供令牌之外,您是否将其用于其他用途?在这种情况下,最好使用像data-token
这样的数据属性。
关于regexp标志的小点:g
和m
标志对你没有任何作用。m
是关于将^
和$
等锚匹配到源字符串中行的开始和结束,这对您来说不是问题。g
是关于多次匹配的,这也不是问题。
您的regexp花费这么长时间的原因很可能是您将整个DOM扔给它。很难判断,除非你给我们看你调用它的代码
相关文章:
- JavaScript:我可以得到完整的url,包括域名、文件名和协议吗
- 使用JavaScript更改url栏中的域名
- 将 URL 或完全限定域名替换为链接
- 将图片从另一个域名url上传到我的服务器
- 从URL中删除协议、域名、域和文件扩展名
- 优化正则表达式匹配域名在url
- 从URL获取域名问题
- 在iFrame中设置基本标签,在域名URL中设置几个部分
- 从URL捕获顶级域名时出现问题
- 如何获得以前的网页URL,不同的域名使用javascript
- TinyBox2:如何使ajax url相对于基础域名url,而不是当前页面
- 获取不带域名的当前URL目录
- 如果指定的域名不等于当前URL,则应用此jQuery以及具有相同域名的页面
- 如果存在顶级域名,则验证没有协议或www的url字符串
- Javascript:检查是否iframe url是相同的域名或外部的东西
- 删除url javascript中域名和http之后的所有内容
- 用jQuery验证域名(没有url方案)
- Google Feed API有域名/URL限制吗?
- 从任何类型的url提取域名
- 如何在JavaScript中检测互联网连接是否断开或域名/URL不存在