下面给你整理一份 TypeScript 中正则表达式的用法及实际应用详解,从基础语法、TS 类型约束,到实际项目应用场景,全方位覆盖。
1️⃣ 正则表达式基础语法
在 TypeScript 中,正则表达式的类型为 RegExp:
const reg: RegExp = /abc/ // 字面量
const reg2: RegExp = new RegExp("abc") // 构造函数
常用正则修饰符:
| 修饰符 | 含义 |
|---|---|
g | 全局匹配 |
i | 忽略大小写 |
m | 多行匹配 |
s | 点号匹配换行符 |
u | Unicode 模式 |
y | 粘连匹配 |
2️⃣ RegExp 常用方法
2.1 test() 判断是否匹配
const regex: RegExp = /^[a-z]+$/i
console.log(regex.test("Hello")) // true
console.log(regex.test("123")) // false
2.2 exec() 获取匹配结果
const regex = /(\d{4})-(\d{2})-(\d{2})/
const result = regex.exec("2025-12-05")
console.log(result)
// [
// "2025-12-05", "2025", "12", "05"
// ]
2.3 字符串方法
const str = "foo123bar456"
// match
console.log(str.match(/\d+/g)) // ["123", "456"]
// replace
console.log(str.replace(/\d+/g, "#")) // foo#bar#
// split
console.log(str.split(/\d+/)) // ["foo", "bar", ""]
3️⃣ 正则表达式常见模式
| 模式 | 示例 | 说明 |
|---|---|---|
\d | /\d+/ | 匹配数字 |
\D | /\D+/ | 匹配非数字 |
\w | /\w+/ | 匹配字母数字下划线 |
\W | /\W+/ | 匹配非字母数字下划线 |
\s | /\s+/ | 匹配空白 |
\S | /\S+/ | 匹配非空白 |
. | /a.b/ | 匹配任意单个字符 |
^ | /^abc/ | 匹配开头 |
$ | /abc$/ | 匹配结尾 |
[] | /[a-z]/ | 字符集合 |
| ` | ` | `/foo |
() | /(\d+)/ | 分组 |
4️⃣ TypeScript 中的类型约束
TS 可以对正则表达式使用类型检查,确保传入函数的是 RegExp 类型:
function validateInput(input: string, pattern: RegExp): boolean {
return pattern.test(input)
}
const phonePattern: RegExp = /^\d{10,11}$/
console.log(validateInput("13812345678", phonePattern)) // true
5️⃣ 实际应用场景示例
5.1 手机号校验
function isPhoneNumber(phone: string): boolean {
const pattern: RegExp = /^1[3-9]\d{9}$/
return pattern.test(phone)
}
console.log(isPhoneNumber("13812345678")) // true
console.log(isPhoneNumber("123456")) // false
5.2 邮箱校验
function isEmail(email: string): boolean {
const pattern: RegExp = /^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/
return pattern.test(email)
}
console.log(isEmail("test@example.com")) // true
console.log(isEmail("test@.com")) // false
5.3 日期格式校验 (YYYY-MM-DD)
function isDate(date: string): boolean {
const pattern: RegExp = /^\d{4}-\d{2}-\d{2}$/
return pattern.test(date)
}
console.log(isDate("2025-12-05")) // true
console.log(isDate("2025/12/05")) // false
5.4 密码强度校验
要求:8-16 位,包含字母和数字:
function isStrongPassword(pwd: string): boolean {
const pattern: RegExp = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/
return pattern.test(pwd)
}
console.log(isStrongPassword("abc12345")) // true
console.log(isStrongPassword("12345678")) // false
5.5 提取文本中的数字
const text = "订单号: 20251205, 金额: 1000"
const numbers = text.match(/\d+/g)
console.log(numbers) // ["20251205", "1000"]
6️⃣ 组合式应用(函数封装)
function validate(pattern: RegExp, value: string): boolean {
return pattern.test(value)
}
// 手机号
console.log(validate(/^1[3-9]\d{9}$/, "13812345678")) // true
// 邮箱
console.log(validate(/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/, "test@example.com")) // true
7️⃣ 总结
- TypeScript 的优势:强类型约束,确保传入
RegExp或字符串正确。 - 常见正则使用:校验手机号、邮箱、密码、日期、提取数字、分割字符串等。
- 实战技巧:
- 对正则进行封装函数,提高复用性
- 使用
match/replace/split做文本处理 - 对动态正则使用
new RegExp()构造
发表回复