面试题:JavaScript 中常用的正则表达式有哪些?

正则表达式(Regular Expression)是 JavaScript 中处理字符串的强大工具,用于匹配、搜索、替换和验证文本模式。以下是 JavaScript 中最常用的正则表达式模式及其应用场景。


一、常用正则表达式模式(Pattern)

1. 字符匹配

模式说明示例
.匹配任意单个字符(除换行符)/a.c/ 匹配 “abc”, “a2c”
\d匹配数字(等价于 [0-9]/\d+/ 匹配 “123”
\D匹配非数字/\D+/ 匹配 “abc”
\w匹配单词字符(字母、数字、下划线 _/\w+/ 匹配 “hello_123”
\W匹配非单词字符/\W+/ 匹配 “!@#”
\s匹配空白字符(空格、制表符、换行符等)/\s+/ 匹配多个空格
\S匹配非空白字符/\S+/ 匹配非空字符
[abc]匹配括号内的任意一个字符/[aeiou]/ 匹配元音字母
[^abc]匹配不在括号内的任意字符/[^0-9]/ 匹配非数字

2. 量词(Quantifiers)

模式说明示例
*匹配0 次或多次/a*/ 匹配 “”, “a”, “aaa”
+匹配1 次或多次/a+/ 匹配 “a”, “aa”(不匹配 “”)
?匹配0 次或 1 次/colou?r/ 匹配 “color” 或 “colour”
{n}匹配恰好 n 次/\d{3}/ 匹配 “123”
{n,}匹配至少 n 次/\d{2,}/ 匹配 “12”, “123”
{n,m}匹配n 到 m 次/\d{2,4}/ 匹配 “12”, “123”, “1234”

3. 位置锚点(Anchors)

模式说明示例
^匹配字符串开头/^Hello/ 匹配以 “Hello” 开头的字符串
$匹配字符串结尾/world$/ 匹配以 “world” 结尾的字符串
\b匹配单词边界/\bcat\b/ 匹配 “cat” 但不匹配 “category”
\B匹配非单词边界/\Bcat\B/ 匹配 “education” 中的 “cat”

4. 分组与捕获

模式说明示例
(pattern)捕获分组,匹配并捕获内容/(abc)+/ 匹配 “abcabc”,捕获 “abc”
(?:pattern)非捕获分组,匹配但不捕获/(?:abc)+/ 匹配但不保存分组
| 操作符/cat|dog/ 匹配 “cat” 或 “dog”

二、常用正则表达式实例

1. 验证手机号(中国大陆)

const phoneRegex = /^1[3-9]\d{9}$/;
// 以 1 开头,第二位是 3-9,共 11 位数字
console.log(phoneRegex.test("13812345678")); // true

2. 验证邮箱

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
// 简化版,实际应用可能更复杂
console.log(emailRegex.test("user@example.com")); // true

3. 验证身份证号(18位)

const idRegex = /^\d{17}[\dXx]$/;
// 17位数字 + 最后一位数字或 X/x
console.log(idRegex.test("11010519491231002X")); // true

4. 验证密码强度(至少8位,包含大小写字母和数字)

const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/;
// 正向先行断言:至少一个小写、一个大写、一个数字,总长至少8位
console.log(passwordRegex.test("MyPass123")); // true

5. 匹配 URL

const urlRegex = /^https?:\/\/[^\s$.?#].[^\s]*$/;
// 匹配 http 或 https 开头的 URL
console.log(urlRegex.test("https://example.com")); // true

6. 去除字符串首尾空白

const trimRegex = /^\s+|\s+$/g;
"  hello world  ".replace(trimRegex, ""); // "hello world"
// 注:实际开发中更推荐使用 String.trim()

7. 匹配 HTML 标签(简单示例)

const tagRegex = /<([^>]+)>/g;
// 匹配尖括号内的内容
"<p>Hello</p>".match(tagRegex); // ["<p>", "</p>"]

三、JavaScript 正则相关方法

方法说明
regex.test(str)返回 true/false,检查是否匹配
regex.exec(str)返回匹配结果数组(包含捕获组)或 null
str.match(regex)返回所有匹配项的数组(全局匹配)或详细信息(非全局)
str.search(regex)返回第一个匹配项的索引,未找到返回 -1
str.replace(regex, replacement)替换匹配的文本
str.split(regex)使用正则作为分隔符分割字符串

四、修饰符(Flags)

修饰符说明
g全局匹配(查找所有匹配,而非第一个)
i忽略大小写
m多行模式^$ 匹配每行的开始/结束)
uUnicode 模式(正确处理 Unicode 字符)
sdotAll 模式. 匹配包括换行符在内的所有字符)

示例/\d+/g 全局匹配所有数字序列。


总结

掌握常用正则表达式模式(\d, \w, *, +, ?, ^, $, {n,m})和典型应用场景(验证、搜索、替换)是前端开发的必备技能。

虽然正则功能强大,但也应避免编写过于复杂的正则,以免影响可读性和性能。在实际项目中,对于邮箱、URL 等复杂验证,建议使用成熟的第三方库。

THE END
喜欢就支持一下吧
点赞9 分享