Regex从文本中提取URL(有/没有协议和www或子域)
Regex to extract URL from text (with/without protocol and www or subdomains)
我想从元素内的文本中提取URL。我不太擅长regexp,但这是我迄今为止所做的:
var regexp = /((https?:'/'/)?['w-]+('.['w-]+)+'.?(:'d+)?('/'S*)?)/i;
请检查这个fiddle,看看我的regexp是如何工作的:http://jsfiddle.net/h70mr1zt/5/
这是我需要的结果:
1. stackoverflow => not found
2. stackoverflow.com => found => stackoverflow.com
3. www.stackoverflow.com => found => www.stackoverflow.com
4. api.stackoverflow.com => found => api.stackoverflow.com
5. http://www.stackoverflow.com => found => http://www.stackoverflow.com
6. foo://www.stackoverflow.com => found => www.stackoverflow.com
7. someone@stackoverflow.com => not found
8. .com => not found
正如你所看到的,我几乎把一切都做好了,除了数字7,它识别电子邮件地址的域部分。
您可以使用类似的正则表达式
^(http:'/'/)?(www'.)?'w+'.(com|net|org)$
参见示例
http://regex101.com/r/uQ9aL4/1
它是如何工作的?
^
将正则表达式固定在该行的开头。
(http:'/'/)?
模拟http://
0或1次出现
(www'.)
匹配0或1次www.
'w*
计算任意数量的字母数
.(com|net|org)$
匹配.com
或.net
或.org
$
将正则表达式锚定在字符串的末尾。
您可以使用以下regexp:
/^(?:[a-z]*?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*'/?$/i
参见jsfiddle
编辑
在不使用断言的情况下,很难匹配ANY(甚至是虚构的)协议,也很难从电子邮件中排除域名(Lookahead&&lookbacking,javascript不支持)。
我会选择这样的东西:
$('li').each(function(){
var text = $(this).text(),
regexp = /(^https?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*'/?$/i;
regexpMail = /'b[A-Z0-9._%+-]+@[A-Z0-9.-]+'.[A-Z]{2,4}'b/i;
if((url = regexp.exec(text)) && !text.match(regexpMail)){
$(this).append(' => <b>found</b> => <span>'+url[0]+'</span>');
}else{
$(this).append(' => <b class="nf">not found</b>');
}
});
分解:
Matches http/s matches the rest
v v
regexp = /(^https?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*'/?$/i;
由于上述电子邮件将提取电子邮件的域名部分,您也需要进行安全检查以排除电子邮件,因此在以下regexp:中进行了切换
regexpMail = /'b[A-Z0-9._%+-]+@[A-Z0-9.-]+'.[A-Z]{2,4}'b/i;
做所有这些都会得到你想要的结果。其他人可能会把它放在一个正则表达式中,但我不是那么好。
相关文章:
- 在不设置协议的情况下,使用javascript/jquery更改iframe-src
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- 使用application/x-www-form-urlencoded使用node.js在post请求中发送数组
- 强制URL字段不具有“;http://www."使用regex
- jQuery协议问题
- 单应用程序中的点云www和TCP
- 为什么XMLHttpRequest没有't与“;www.”;
- 用Chrome检测Windows8+中的自定义协议处理程序
- 我想创建一个类似于http://www.creativecrisp.com/.
- jQuery 表单插件:XMLHttpRequest 无法加载 http://www...没有“访问控制允许来源”
- 我的 AJAX 请求对象无法正确解析 URL 的协议部分
- 茉莉花Maven插件包括我的脚本使用文件协议
- 在第'www.foo.com',可以从'www.example.com'将ajax请求发
- 如何通过JavaScript获取HTTP协议版本
- Perl使用WWW::机械化来设置一个没有值的单选按钮
- Nodejs/bin/www脚本在启动时未运行
- 垂直整页滑块,如Angular中的www.tumblr.com
- 我得到了这个错误,但是不要;我不知道如何修复它,www.example.com/undefined?1460018627
- 如果存在顶级域名,则验证没有协议或www的url字符串
- 在Javascript中使用//www.example.com是否自动选择了http/https协议