将两个检查 url 的正则表达式合并为一个
Combine two regular expression that check an url into one
这是我用来检查 url 是否为子域的代码。
var domain_1 = "abc.mydomain.com";
var domain_2 = "abc.localhost:44880"
var regex1 = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+\.\w+)$/);
var regex2 = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+\:\w+)$/);
let result1 = !!domain_1.match(regex1);
let result2 = !!domain_2.match(regex2);
如您所见,第一个子域的格式类似于 ###.###.###(有两个点)第二个是 ###.###:###(带一个点和一个冒号)。
对于这两种格式,我需要两个正则表达式。
我可以合二为一吗?
这对我有用
const domain_1 = "abc.mydomain.com";
const domain_2 = "abc.localhost:44880"
const regex = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+((\.\w+)|(\:\d+)))$/);
const result1 = regex.test(domain_1);
const result2 = regex.test(domain_2);
console.log(result1, result2)
https://www.ocpsoft.org/tutorials/regular-expressions/or-in-regex/
这会处理域名的单个单词 (localhost
) 到多个点分隔的单词 (abc.many.subs.mydomain.com
),确保没有连续的点,后跟一个可选的端口号(:1234
) :
const domains = [
'abc.mydomain.com',
'abc.localhost:44880',
'localhost',
'abc.many.subs.mydomain.com',
'abc.my@domain.com',
'abc.my@domain.com:1234'
];
const regex = /^[a-z_\-]+(\.[a-z_\-]+)*(\:[0-9]+)?$/;
domains.forEach((domain) => {
var result = regex.test(domain);
console.log(domain + ' ==> ' + result)
});
控制台输出:
abc.mydomain.com ==> true
abc.localhost:44880 ==> true
localhost ==> true
abc.many.subs.mydomain.com ==> true
abc.my@domain.com ==> false
abc.my@domain.com:1234 ==> false
解释:
^...$
- 在开始和结束处锚定正则表达式
[a-z_\-]+
- 以一个或多个允许字符的单词开头
(\.[a-z_\-]+)*
- 后跟零次或多次出现的点和单词
(\:[0-9]+)?
- 后跟一个可选的点和至少一个数字
这是我用来检查 url 是否为子域的代码。
var domain_1 = "abc.mydomain.com";
var domain_2 = "abc.localhost:44880"
var regex1 = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+\.\w+)$/);
var regex2 = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+\:\w+)$/);
let result1 = !!domain_1.match(regex1);
let result2 = !!domain_2.match(regex2);
如您所见,第一个子域的格式类似于 ###.###.###(有两个点)第二个是 ###.###:###(带一个点和一个冒号)。
对于这两种格式,我需要两个正则表达式。
我可以合二为一吗?
这对我有用
const domain_1 = "abc.mydomain.com";
const domain_2 = "abc.localhost:44880"
const regex = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+((\.\w+)|(\:\d+)))$/);
const result1 = regex.test(domain_1);
const result2 = regex.test(domain_2);
console.log(result1, result2)
https://www.ocpsoft.org/tutorials/regular-expressions/or-in-regex/
这会处理域名的单个单词 (localhost
) 到多个点分隔的单词 (abc.many.subs.mydomain.com
),确保没有连续的点,后跟一个可选的端口号(:1234
) :
const domains = [
'abc.mydomain.com',
'abc.localhost:44880',
'localhost',
'abc.many.subs.mydomain.com',
'abc.my@domain.com',
'abc.my@domain.com:1234'
];
const regex = /^[a-z_\-]+(\.[a-z_\-]+)*(\:[0-9]+)?$/;
domains.forEach((domain) => {
var result = regex.test(domain);
console.log(domain + ' ==> ' + result)
});
控制台输出:
abc.mydomain.com ==> true
abc.localhost:44880 ==> true
localhost ==> true
abc.many.subs.mydomain.com ==> true
abc.my@domain.com ==> false
abc.my@domain.com:1234 ==> false
解释:
^...$
- 在开始和结束处锚定正则表达式[a-z_\-]+
- 以一个或多个允许字符的单词开头(\.[a-z_\-]+)*
- 后跟零次或多次出现的点和单词(\:[0-9]+)?
- 后跟一个可选的点和至少一个数字