我尝试做的是当我有:
www.gmail.com,
www.gmail.com /
www.gmail.com/example
刚刚获取gmail.com,远远没有搜索相关问题,我有模式匹配这些东西:
var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+)/;
但是当我也说出一个单词时它也会返回true。 gmail(没有.com)。 我怎样才能改进这个以匹配abcd.efgs.com形式的东西?我的意思是指定字符串应该包含http,https,www之后的字符和至少一个点。 ?
提前致谢!
答案 0 :(得分:2)
如果我的理解是正确的,您只想匹配网址的域名。
您可以使用此模式执行此操作
(?:\w+\.)+\w+
我已经复制了您的JavaScript小提琴,并使用html text 和 textarea 框进行了更改以演示此内容。 文本框演示,从用户输入的URL中提取域名。 textarea 框演示列出了输入的多行文字中的所有域。
<强> http://jsfiddle.net/q6z3xb6d/ 强>
再次阅读你的问题。您希望排除以www
开头的域名的匹配项。您可以使用此模式:
(?!(w+)\.)\w*(?:\w+\.)+\w+
JS小提琴演示 - 更新版本:
答案 1 :(得分:0)
^(?:https?:\/\/)?(?:www\.)?((?:(?!www\.|\.).)+\.[a-zA-Z0-9.]+)
试试这个。看看演示。
答案 2 :(得分:0)
给定一个输入字段,如:
<input type='text' id='domain'/>
我最终得到了这个解决方案,我首先将其验证为网址,然后在没有&#39; http://&#39;,&#39; https://&#39; ,&#39; www。&#39;
$(document).ready(function(){
function ValidUrl(str) {
var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
'(\\#[-a-z\\d_]*)?$','i'); // fragment locator
if(!pattern.test(str)) {
return false;
} else {
return true;
}
}
$('#domain').change(function(){
var str = $.trim($(this).val());
if(ValidUrl(str)){
var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+)/;
var match = str.match(pat);
console.log(match);
//$(this).val(str);
}
else{
$(this).val('Validation failed');
}
});
});
另见jsfiddle:http://jsfiddle.net/6mrbbq9x/5/