JavaScript的正则表达式(Regular Expressions,简称Regex或RegExp)是一种强大的工具,用于匹配字符串中的模式。正则表达式包含许多元字符(Metacharacters),这些元字符用于定义模式的结构。

一、元字符

以下是一些常用的JavaScript正则表达式元字符及其含义:

1. 基本元字符

  • .:匹配除换行符之外的任何单个字符。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配单词边界(单词的开头或结尾)。
  • \B:匹配非单词边界。

2. 字符类

  • [...]:匹配字符集中的任何一个字符。例如,[abc] 匹配 ab 或 c
  • [^...]:匹配不在字符集中的任何一个字符。例如,[^abc] 匹配除了 abc 之外的任何一个字符。
  • \d:匹配任何一个数字字符(等价于 [0-9])。
  • \D:匹配任何一个非数字字符(等价于 [^0-9])。
  • \w:匹配任何一个字母、数字或下划线字符(等价于 [A-Za-z0-9_])。
  • \W:匹配任何一个非字母、数字或下划线字符(等价于 [^A-Za-z0-9_])。
  • \s:匹配任何一个空白字符(包括空格、制表符、换页符等)。
  • \S:匹配任何一个非空白字符。

3. 量词

  • *:匹配前面的元素零次或多次。
  • +:匹配前面的元素一次或多次。
  • ?:匹配前面的元素零次或一次。
  • {n}:匹配前面的元素正好 n 次。
  • {n,}:匹配前面的元素至少 n 次。
  • {n,m}:匹配前面的元素至少 n 次,但不超过 m 次。

4. 分组和捕获

  • (...):分组并捕获匹配的子表达式。
  • (?:...):分组但不捕获匹配的子表达式。
  • (?=...):正向前瞻,匹配但不在结果中包含。
  • (?!...):负向前瞻,匹配但不在结果中包含。
  • (?<=...):正向后顾,匹配但不在结果中包含。
  • (?<!...):负向后顾,匹配但不在结果中包含。

5. 常用转义字符

  • \\:匹配反斜杠字符。
  • \n:匹配换行符。
  • \t:匹配制表符。
  • \r:匹配回车符。
  • \f:匹配换页符。

6. 其他元字符

  • |:或操作符,匹配两者之一。例如,a|b 匹配 a 或 b

7. 示例:

为了更好地理解这些正则表达式元字符和方法,我们可以通过具体的JavaScript实例来说明。

实例1: 使用 ., ^, 和 $

let str = "hello";

// 使用 . 匹配任意字符
console.log(/./.test(str)); // true,因为 . 可以匹配任意字符

// 使用 ^ 匹配字符串开始的位置
console.log(/^h/.test(str)); // true,因为字符串以 'h' 开头

// 使用 $ 匹配字符串结束的位置
console.log(/o$/.test(str)); // true,因为字符串以 'o' 结尾

实例2: 使用 \w\W\d\D\s\S

let str = "Hello_123!";

// 使用 \w 匹配数字、字母和下划线
console.log(/\w/.test(str)); // true,因为 'H' 是字母

// 使用 \W 匹配非数字和字母
console.log(/\W/.test(str)); // true,因为 '!' 是非数字和字母

// 使用 \d 匹配数字
console.log(/\d/.test(str)); // true,因为 '1' 是数字

// 使用 \D 匹配非数字
console.log(/\D/.test(str)); // true,因为 'H' 是非数字

// 使用 \s 匹配空白字符
console.log(/\s/.test(str)); // false,因为没有空白字符

// 使用 \S 匹配非空白字符
console.log(/\S/.test(str)); // true,因为 'H' 是非空白字符

实例3: 使用 [][^a-z]+*?

let str = "Hello123!";

// 使用 [] 匹配里面的任意字符
console.log(/[a-z]/.test(str)); // true,因为 'e' 是小写字母

// 使用 [^a-z] 匹配除a到z之外的所有字符
console.log(/[^a-z]/.test(str)); // true,因为 'H' 不是小写字母

// 使用 + 匹配重复一次或者多次
console.log(/l+/.test(str)); // true,因为 'll' 是重复的 'l'

// 使用 * 匹配重复0次或者多次
console.log(/x*/.test(str)); // true,因为 'x' 可以重复0次

// 使用 ? 匹配重复1次或者是0次
console.log(/H?/.test(str)); // true,因为 'H' 出现1次

实例4: 使用 ()|?:?=?!?<=?<!{4,8}

let str = "Hello123!";

// 使用 () 分组匹配
console.log(/(l)/.test(str)); // true,因为 'l' 被分组匹配

// 使用 | 或者
console.log(/H|e/.test(str)); // true,因为 'H' 或 'e' 存在

// 使用 ?: 分组匹配不捕获
console.log(/(?:l)/.test(str)); // true,但不会捕获 'l'

// 使用 ?= 正向肯定预查
console.log(/H(?=e)/.test(str)); // true,因为 'H' 后面是 'e',但不匹配 'e'

// 使用 ?! 正向否定预查
console.log(/H(?!x)/.test(str)); // true,因为 'H' 后面不是 'x'

// 使用 ?<= 反向肯定预查
console.log(/(?<=H)e/.test(str)); // true,因为 'e' 前面是 'H',但不匹配 'H'

// 使用 ?<! 反向否定预查
console.log(/(?<!x)e/.test(str)); // true,因为 'e' 前面不是 'x'

// 使用 {4,8} 最少4位 最多8位匹配
console.log(/[a-z]{4,8}/.test(str)); // true,因为 'Hello' 符合4到8位的条件

实例5: 使用 test()exec()match()search()replace()

let str = "Hello, World!";

// 使用 test()
console.log(/Hello/.test(str)); // true,因为 'Hello' 存在于字符串中

// 使用 exec()
let result = /Hello/.exec(str);
console.log(result); // ["Hello"],返回匹配的数组

// 使用 match()
console.log(str.match(/Hello/)); // ["Hello"],返回匹配的数组

// 使用 search()
console.log(str.search(/Hello/)); // 0,返回第一个匹配的位置

// 使用 replace()
console.log(str.replace(/Hello/, "Hi")); // "Hi, World!",替换了 'Hello' 为 'Hi'

这些实例展示了如何使用JavaScript中的正则表达式来匹配和操作字符串。理解这些元字符和方法可以帮助你更有效地处理字符串操作。

二、正则表达式案例

1. 检查用户名格式

<script>
function checkUser(str) {
    // 模式
    var re = /^[a-zA-Z][a-zA-Z0-9_]{3,15}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkUser('h111')); // 正确
console.log(checkUser('1h111')); // 错误
</script>

2. 检查邮箱格式

<script>
function checkEmail(str) {
    // 模式
    var re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkEmail('example@example.com')); // 正确
console.log(checkEmail('example@example')); // 错误
</script>

3. 检查电话号码格式(仅限数字)

<script>
function checkPhone(str) {
    // 模式
    var re = /^\d{10}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkPhone('1234567890')); // 正确
console.log(checkPhone('123456789')); // 错误
</script>

4. 检查密码格式(至少一个大写字母、一个小写字母、一个数字、一个特殊字符,长度为8到20)

<script>
function checkPassword(str) {
    // 模式
    var re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkPassword('Password1!')); // 正确
console.log(checkPassword('password')); // 错误
</script>

5. 检查URL格式

<script>
function checkURL(str) {
    // 模式
    var re = /^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkURL('http://example.com')); // 正确
console.log(checkURL('example.com')); // 错误
</script>

6. 检查日期格式(YYYY-MM-DD)

<script>
function checkDate(str) {
    // 模式
    var re = /^\d{4}-\d{2}-\d{2}$/g;
    if (re.test(str)) {
        return '正确';
    } else {
        return '错误';
    }
}
console.log(checkDate('2024-10-07')); // 正确
console.log(checkDate('2024-10-7')); // 错误
</script>

7. 检查IP地址格式

<script>
function checkIP(str) {
    // 模式
    var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/g;
    if (re.test(str)) {
        // 进一步检查每个部分是否在0到255之间
        var parts = str.split('.');
        if (parts.every(part => part >= 0 && part <= 255)) {
            return '正确';
        } else {
            return '错误';
        }
    } else {
        return '错误';
    }
}
console.log(checkIP('192.168.1.1')); // 正确
console.log(checkIP('192.168.1')); // 错误
console.log(checkIP('256.168.1.1')); // 错误
</script>

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部