下面给你整理一份 TypeScript 中正则表达式的用法及实际应用详解,从基础语法、TS 类型约束,到实际项目应用场景,全方位覆盖。


1️⃣ 正则表达式基础语法

在 TypeScript 中,正则表达式的类型为 RegExp

const reg: RegExp = /abc/          // 字面量
const reg2: RegExp = new RegExp("abc") // 构造函数

常用正则修饰符:

修饰符含义
g全局匹配
i忽略大小写
m多行匹配
s点号匹配换行符
uUnicode 模式
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️⃣ 总结

  1. TypeScript 的优势:强类型约束,确保传入 RegExp 或字符串正确。
  2. 常见正则使用:校验手机号、邮箱、密码、日期、提取数字、分割字符串等。
  3. 实战技巧
    • 对正则进行封装函数,提高复用性
    • 使用 match / replace / split 做文本处理
    • 对动态正则使用 new RegExp() 构造