要求
补全JavaScript代码,要求以Boolean的形式返回字符串参数是否为合法的URL格式。
注意:协议仅为HTTP(S)
示例代码
const _isUrl = url => {
// 补全代码
let reg = /^((https|http):\/\/)?(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+([A-Za-z]{2,6})(:\d+)?(\/.*)?(\?.*)?(#.*)?$/g;
return reg.test(url)
}
这题就是考察了正则的应用,运用了大量的正则知识,包括:
-
^
代表开头 -
[A-Za-z0-9]
表示匹配大小写字母和数字 -
\/表示匹配/
,因为在正则里/有其它含义,所以要匹配/需要在前面使用\对其进行转义 -
?
等价于{0,1}
,表示出现一次或者不出现 -
+
表示出现的次数至少为1
-
|
(管道符),是或的意思,表示匹配|两边内容的其中任何之一 -
\.
表示匹配.
,与/
一样,要匹配.需要在前面使用\对其进行转义 -
{n,m}
表示出现n-m
次 -
\d
匹配数字 -
.
就是[^\n\r\u2028\u2029]
,是通配符,表示几乎任意字符 -
*
表示出现次数为0次或者多次 -
.*
就是匹配任何多个任意字符 -
$
代表结尾 -
g
代表全局匹配
合法的URL格式如下:
- 协议部分
http(s)
可选: 表示为((https|http):\/\/)?
- 域名部分 :表示为
(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+
- 顶级域名,如
com
、cn
等为2-6位:表示为([a-zA-Z]{2,6})
- 端口部分:表示为
(:\d+)?
- 请求路径如/login:表示为
(\/.*)?
- 问号传参及哈希值如
?age=1
、#dom
:表示为(\?.*)?
和(#.*)?