前言
本文将从一道JS基础题入手,复习一下正则表达式相关的知识点。
题目描述
请补全JavaScript代码,要求以Boolean的形式返回字符串参数是否为合法的URL格式。注意:1. 协议仅为HTTP(S)
解答①
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
</head>
<body>
<script type="text/javascript">
const _isUrl = url => {
// 补全代码
return /^https?:\/\/[a-z0-9A-Z_$][\w-]*(\.[\w-]+)+(\:\d+)?(\/\w+)*(\?\w+=.*(\&\w+=.*)*)?/g.test(url);
}
</script>
</body>
</html>
解答② 更简洁的URL合法性检测
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
</head>
<body>
<script type="text/javascript">
const _isUrl = url => {
// 补全代码
return /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(url);
}
</script>
</body>
</html>
解析
/^...$/i: 正则表达式的起始符号和结束符号,表示整个正则表达式的范围。其中^表示匹配字符串的开始位置,$表示匹配字符串的结束位置,i是一个修饰符,表示忽略大小写。(https?|ftp): 一个分组,使用|分隔,表示两种可能的情况。https?表示匹配以 "http" 开头的字符串,后面的s可能存在也可能不存在,ftp表示匹配 "ftp"。:\/\/: 匹配一个冒号和两个斜杠,用来匹配 URL 中的协议部分。.: 匹配除换行符之外的任意一个字符。[^\s]*:*表示匹配零个或多个前面的元素,[^\s]*表示匹配任意多个非空白字符。/i: 正则表达式的修饰符,i表示忽略大小写。
综合起来,该正则表达式用于匹配以 "http" 或 "https" 或 "ftp" 开头的 URL,后面跟着一个冒号和两个斜杠,然后是任意非空白字符,最后以任意多个非空白字符结尾。它可以用来验证一个字符串是否符合 URL 的格式。
Footnotes
一个字符类,用方括号括起来。^ 在字符类内表示取非,[^\s] 表示匹配任意非空白字符,[/$.?#] 表示匹配任意一个斜杠、问号、点号或井号。 ↩
更完整、更通用的URL合法性检测 正则表达式
/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
自编URL检测 正则表达式
/^(https?|ftp):\/\/[^\s/$.?#]*[^\s/$.$].[^\s]*$/i
后面可根据需要换成/gi
在字符串中匹配到一个有效的URL
/https?:\/\/[^\s/$.?#]*[^\s/$.$].[^\s]*/gi
效果展示

解析
/^(https?|ftp):\/\/[^\s/$.?#]*[^\s/$.$].[^\s]*$/i
- 正则表达式匹配串以
/开始,以修饰符/i结束- 全局搜索 -g
- 忽略大小写 -i
- 多行模式 -m
- 包含换行符 -s
(A|B)表示这块儿是A或是Babc?表示ab或abc- 用转义字符
\/\/来表示两个斜杠,即// a$中的$修饰前面的字符或字符类,表示“在结尾的”,比如这里表示“在结尾的a”^a中的^修饰前面的字符或字符类,表示“在开头的”,比如这里表示“在开头的a”[]表示一个字符类- 在正则表达式中,方括号
[]表示一个字符类(Character Class),用于匹配一个字符的集合。在字符类中,可以列出多个字符或字符范围,表示匹配其中任意一个字符 [abc]匹配字符'a'、'b'或'c'[0-9]匹配任意一个数字字符[A-Za-z]匹配任意一个字母字符(大小写不限)[^abc]使用^在字符类开头表示取反,表示匹配除了字符'a'、'b'和'c'之外的任意一个字符- 在字符类中,可以使用多个字符或字符范围,它们之间不需要分隔符。其中的特殊字符如
^、-、[、]、$等需要进行转义,可以使用反斜杠\进行转义,如匹配$用\$
- 在正则表达式中,方括号
[^\s/$.?#]表示匹配一个字符,这个字符不是以下任意一种字符:空白字符(\s)、在结尾的斜杠(/$)、符号.、符号?、符号#*表示匹配零次或多次前面的字符或字符类
特殊符号小结
.:匹配任意字符。例如,正则表达式 a.b 可以匹配 "aab"、"axb"、"a%b" 等。
*:匹配前面的字符零次或多次。例如,正则表达式 ab*c 可以匹配 "ac"、"abc"、"abbc"、"abbbc" 等。
+:匹配前面的字符一次或多次。例如,正则表达式 ab+c 可以匹配 "abc"、"abbc"、"abbbc" 等,但不能匹配 "ac"。
?:匹配前面的字符零次或一次。例如,正则表达式 colou?r 可以匹配 "color" 或 "colour"。
{}:用于指定匹配次数的量词。例如,正则表达式 [0-9]{3} 可以匹配三位数字。
[]:用于定义字符类。例如,正则表达式 [abc] 可以匹配 "a"、"b" 或 "c"。
():用于分组。例如,正则表达式 (ab)+ 可以匹配 "ab"、"abab"、"ababab" 等。
|:用于表示逻辑或。例如,正则表达式 cat|dog 可以匹配 "cat" 或 "dog"。
\:用于转义特殊字符。例如,要匹配特殊字符 .,可以使用正则表达式 \.。
\d:匹配任何一个数字字符,等同于 [0-9]。
\D:匹配任何一个非数字字符,等同于 [^0-9]。
\b:匹配单词边界。通常用于确保匹配的数字是一个完整的单词或数字串的一部分。
\B:匹配非单词边界。
\w:匹配单词字符,包括字母、数字和下划线,等同于 [A-Za-z0-9_]。
\W:匹配非单词字符。
\s:匹配空白字符,包括空格、制表符、换行符等。
\S:匹配非空白字符。










Comments NOTHING