我试图采用这种正则表达式来满足我的需求:
(?:^|\s)(?:https?:\/\/)?(?:\w+(?=\.).)?(?<name>.*).(?<tld>(?<=\.)\w+)
演示: https://regex101.com/r/lI2lB4/2
我想为所有条目返回匹配项:
但不适用于
现在上面显示的正则表达式工作正常,但它会返回不同的匹配项(匹配1,匹配2,...) - 但是只想获得一个结果:Matching
或not matching
。
因此我想使用
regExDomain.test($regExDomain.test(input.val()))
{
console.log('valid');
}
else
{
console.log('invalid');
}
问题是:上面的regEx似乎总是返回&#34;有效&#34;。
任何想法如何做到这一点?
答案 0 :(得分:1)
Regex类的test()
函数应足以验证输入是否与模式匹配。
你可以这样做:
var pattern = /^(http[s]?:\/\/)?(www\.)?([^\.]+)\.[^\.]{2,3}$/
var regex = new RegExp(pattern);
for(var i=1; i<=3; i++) {
if ( regex.test( $("#text"+i).text() ) )
$("#isMatch"+i).html("MATCHES");
else
$("#isMatch"+i).html("DOESN'T MATCH");
}
jsfiddle示例:http://jsfiddle.net/jyu16m89/1/
上述示例将针对扩展域返回false(例如“.digital”或“.menu”)。如果您想将其包含在模式中,请将{2,3}
替换为+
如果您想在模式中包含子域名/文件夹(例如,对于http://stackoverflow.com/questions/
等条目返回true),请删除美元符号(这不会将字符串限制为结束)。
答案 1 :(得分:0)
您有一个分组的正则表达式,因此它将返回match[n]
,其中n是匹配的组数。如果没有任何匹配,那么你将得到null:
function isUrl(myString) {
var match = myString.match('/(?:^|\s)(?:https?:\/\/)?(?:\w+(?=\.).)?(?<name>.*).(?<tld>(?<=\.)\w+)/');
if(match !== null) {
return true;
}
return false;
}