正则表达式该怎么使用?

JavaScript 正则表达式复习笔记

一、正则表达式简介

  • 正则表达式是一种用于匹配字符串模式的强大工具。在 JavaScript 中,正则表达式可以用于字符串的搜索、替换和验证等操作。

二、创建正则表达式

1. 使用正则表达式字面量

  • 语法/pattern/flags,其中 pattern 是正则表达式的模式,flags 是可选的标志,用于指定正则表达式的行为。
  • 实例
let pattern = /abc/;
console.log(pattern.test("abcdef")); // 输出:true

2. 使用 RegExp 构造函数

  • 语法new RegExp(pattern, flags),其中 patternflags 的含义与字面量形式相同。
  • 实例
let pattern = new RegExp("abc");
console.log(pattern.test("abcdef")); // 输出:true

三、正则表达式的模式

1. 字符匹配

  • 可以直接使用字符来匹配字符串中的特定字符。
  • 实例
let pattern = /a/;
console.log(pattern.test("apple")); // 输出:true

2. 字符集

  • 使用 [ ] 来定义一个字符集,可以匹配其中的任意一个字符。
  • 实例
let pattern = /[abc]/;
console.log(pattern.test("apple")); // 输出:true
console.log(pattern.test("banana")); // 输出:false

3. 重复匹配

  • 使用 {} 来指定重复的次数。例如,{n} 表示重复 n 次,{n,} 表示重复至少 n 次,{n,m} 表示重复 n 到 m 次。
  • 实例
let pattern = /a{3}/;
console.log(pattern.test("aaab")); // 输出:true
console.log(pattern.test("aaa")); // 输出:true
console.log(pattern.test("aab")); // 输出:false

4. 量词

  • 使用 ? 表示 0 次或 1 次,* 表示 0 次或多次,+ 表示 1 次或多次。
  • 实例
let pattern = /a?b/;
console.log(pattern.test("b")); // 输出:true
console.log(pattern.test("ab")); // 输出:true
console.log(pattern.test("aab")); // 输出:false

let pattern2 = /a*b/;
console.log(pattern2.test("b")); // 输出:true
console.log(pattern2.test("ab")); // 输出:true
console.log(pattern2.test("aab")); // 输出:true
console.log(pattern2.test("aaaaab")); // 输出:true

let pattern3 = /a+b/;
console.log(pattern3.test("b")); // 输出:false
console.log(pattern3.test("ab")); // 输出:true
console.log(pattern3.test("aab")); // 输出:true
console.log(pattern3.test("aaaaab")); // 输出:true

5. 分组

  • 使用 ( ) 来进行分组,可以对一组字符进行重复或其他操作。
  • 实例
let pattern = /(ab)+c/;
console.log(pattern.test("abc")); // 输出:false
console.log(pattern.test("ababc")); // 输出:true
console.log(pattern.test("abababc")); // 输出:true

6. 选择

  • 使用 | 来表示选择,可以匹配多个模式中的任意一个。
  • 实例
let pattern = /apple|banana/;
console.log(pattern.test("apple")); // 输出:true
console.log(pattern.test("banana")); // 输出:true
console.log(pattern.test("orange")); // 输出:false

四、正则表达式的标志

1. g(全局匹配)

  • 用于在整个字符串中进行全局匹配,而不是在找到第一个匹配后就停止。
  • 实例
let pattern = /a/g;
let str = "apple banana";
let matches = str.match(pattern);
console.log(matches); // 输出:["a", "a"]

2. i(忽略大小写)

  • 使正则表达式在匹配时忽略大小写。
  • 实例
let pattern = /a/i;
console.log(pattern.test("Apple")); // 输出:true

3. m(多行匹配)

  • 使正则表达式可以在多行字符串中进行匹配,^$ 可以匹配每行的开头和结尾。
  • 实例
let pattern = /^a/m;
let str = "apple\nbanana";
let matches = str.match(pattern);
console.log(matches); // 输出:["a"]

五、正则表达式的方法

1. test()
  • 用于测试一个字符串是否匹配正则表达式,返回一个布尔值。
  • 实例
let pattern = /abc/;
console.log(pattern.test("abcdef")); // 输出:true
2. match()
  • 用于在字符串中查找匹配正则表达式的部分,返回一个数组或 null。
  • 实例
let pattern = /a(bc)/;
let str = "abcdef";
let matches = str.match(pattern);
console.log(matches); // 输出:["abc", "bc"]
3. replace()
  • 用于在字符串中替换匹配正则表达式的部分。
  • 实例
let pattern = /apple/;
let str = "I like apples.";
let newStr = str.replace(pattern, "oranges");
console.log(newStr); // 输出:"I like oranges."

4. split()

  • 用于根据正则表达式将字符串分割成数组。
  • 实例
let pattern = /,/;
let str = "apple,banana,orange";
let arr = str.split(pattern);
console.log(arr); // 输出:["apple", "banana", "orange"]

通过以上的笔记和实例,可以更好地理解和使用 JavaScript 中的正则表达式。正则表达式在处理字符串操作时非常强大,可以大大提高开发效率。

用正则表达式匹配电子邮箱地址的代码示例

// 定义验证电子邮箱的正则表达式
const emailRegExp = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/;

// 一些测试的电子邮箱地址示例
const validEmails = [
    "example@example.com",
    "user_123@domain.co.uk",
    "john.doe+tag@company.io"
];

const invalidEmails = [
    "example@.com", // 缺少域名部分
    "example.com", // 没有 @ 符号
    "@example.com", // 缺少用户名部分
    "user@domain.", // 缺少顶级域名
    "user@domain.c" // 顶级域名长度不符合要求
];

// 验证有效电子邮箱地址
validEmails.forEach(email => {
    if (emailRegExp.test(email)) {
        console.log(`${email} 是有效的电子邮箱地址。`);
    } else {
        console.log(`${email} 不是有效的电子邮箱地址。`);
    }
});

// 验证无效电子邮箱地址
invalidEmails.forEach(email => {
    if (emailRegExp.test(email)) {
        console.log(`${email} 是有效的电子邮箱地址。`);
    } else {
        console.log(`${email} 不是有效的电子邮箱地址。`);
    }
});

正则表达式解释

  • ^:表示匹配字符串的开始位置,确保从字符串开头进行匹配,避免出现部分匹配的情况(比如在一个长字符串中间出现类似邮箱格式的字符也被误判为邮箱)。

  • [a-zA-Z0-9_.+-]+
    

    • [ ] 表示字符集,里面列举的字符都是可接受的字符。这里允许出现的字符有大小写字母(a-zA-Z)、数字(0-9)以及 ._+- 这些特殊字符。
    • + 是量词,表示前面的字符集里的字符可以出现 1 次或多次,也就是用户名部分至少要有 1 个合法字符。例如 useruser_123john.doe 等都是符合这部分规则的用户名形式。
  • @:匹配电子邮箱地址中的 @ 符号,用于分隔用户名和域名部分。

  • [a-zA-Z0-9-]+
    

    • 同样是字符集,这里表示域名部分(在 @ 符号后面到 . 之前的部分)可以包含大小写字母、数字以及 - 符号,并且至少出现 1 次。例如 domainexample-domain 等都是符合要求的域名形式。
  • \.:因为 . 在正则表达式中有特殊含义(表示匹配任意字符),所以如果要匹配实际的 . 字符,需要使用 \ 进行转义,这里就是匹配域名中的 . 符号,用于分隔域名和顶级域名。

  • [a-zA-Z0-9-.]+
    

    • 字符集内指定了顶级域名(在最后一个 . 后面的部分)可以出现的字符,包括大小写字母、数字、-.,同样至少出现 1 次。像 comco.ukio 等都是常见的顶级域名形式,都能被这个规则匹配到。
  • $:表示匹配字符串的结束位置,确保整个字符串完全符合电子邮箱地址的格式要求,而不是更长字符串中的一部分符合格式就判定为邮箱地址。

通过这样的正则表达式,就能比较准确地验证一个字符串是否是合法的电子邮箱地址了。不过要注意,实际应用中电子邮箱地址的格式规范非常复杂,这个正则表达式只是覆盖了常见的、基本的合法格式情况,可能存在一些非常特殊的邮箱格式无法准确验证,但对于大多数常规使用场景是足够的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值