RegExp对象

RegExp对象

本文将讲解RegExp对象。

我们将通过实际例子讲解RegExp对象。

YouTube Video

RegExp对象

什么是RegExp?

RegExp(正则表达式)是用于表示字符串模式的对象。与简单的字符比较不同,您可以灵活地定义“满足特定条件的字符串”。

通过使用 RegExp 对象,您可以简洁明了地执行如搜索、验证、提取和替换字符串等操作。它在表单输入验证、日志分析和文本格式化等日常任务中非常有效。以下是一些正则表达式的简单示例。

1const pattern = /abc/;
  • 这个正则表达式用于检查是否包含'abc'这个序列。

如何创建正则表达式(两种方法)

RegExp 语法有两种类型:字面量表示法构造函数表示法

1// Literal notation: pattern and flags are written together
2const literal         = /hello/;
3const literalWithFlag = /hello/i;
4const literalDigits   = /\d+/;
5
6// Constructor notation: pattern and flags are passed separately
7const constructor         = new RegExp("hello");
8const constructorWithFlag = new RegExp("hello", "i");
9const constructorDigits   = new RegExp("\\d+");
  • 字面量表示法简洁易读,适合用作常量的正则表达式。。另一方面,当你希望通过变量构建模式或在运行时确定其内容时,会使用构造函数表示法。
  • 使用字面量表示法时,你可以直观地同时描述正则表达式和其修饰符。相比之下,使用构造函数表示法时,需要分别指定模式和修饰符。
  • 此外,使用构造函数表示法时,正则表达式作为字符串传递,因此反斜杠需要转义两次。

test():最基本的验证方法

RegExp 对象提供了用于使用正则表达式进行判断和操作的方法。test()方法返回一个布尔值,表示是否匹配模式

1const regex = /JavaScript/;
2
3console.log(regex.test("I love JavaScript")); // true
4console.log(regex.test("I love TypeScript")); // false
  • 这是您应该学习的第一个方法,非常适合条件分支或输入验证。

match():获取匹配结果

match()返回一个包含匹配字符串及详细信息的数组

1const text = "Version 1.2.3";
2const result = text.match(/\d+\.\d+\.\d+/);
3
4console.log(result[0]); // "1.2.3"
  • 在提取和解析过程中,match()test()更为方便。

replace():使用正则表达式进行替换

replace()将匹配的部分替换为其他字符串

1const text = "Hello   World";
2const result = text.replace(/\s+/g, " ");
3
4console.log(result); // "Hello World"
  • 您可以将其用于日志格式化或消除不必要的空白。

修饰符基础(g、i、m)

您可以在正则表达式中指定“标志”。标志是根据特定规则控制正则表达式如何处理字符串的选项。即使是相同的模式,结果也可能因标志的不同而改变。

1const text = "apple Apple APPLE";
2const regex = /apple/gi;        // or new RegExp("apple", "gi");
3
4console.log(text.match(regex)); // ["apple", "Apple", "APPLE"]
  • g (全局)标志会在整个字符串中进行搜索。
  • i (忽略大小写)标志在匹配时会忽略大小写的差异。
1const multilineText = `apple
2banana
3apple`;
4
5const regexM = /^apple/gm;
6
7console.log(multilineText.match(regexM)); // ["apple", "apple"]
  • m (多行)标志用于将多行字符串按行处理。有了它,^$ 会基于每一行的开头或结尾进行操作,而不是整个字符串。

字符类:组合多个备选字符

通过使用方括号[],可以为某个位置定义一组可能的字符

1const regex = /gr[ae]y/;
2
3console.log(regex.test("gray")); // true
4console.log(regex.test("grey")); // true
  • 这对于匹配不同拼写和简单的可选项很有用。

元字符:常用快捷方式

元字符是允许你以更简短的形式编写常用模式的符号。

1const regex = /\d{4}-\d{2}-\d{2}/;  // or new RegExp("\\d{4}-\\d{2}-\\d{2}");
2
3console.log(regex.test("2025-12-29")); // true
  • \d表示一个数字,{n}表示重复的次数。

^和$:验证整个字符串

^$表示字符串的开始和结束

1const regex = /^\d+$/;
2
3console.log(regex.test("123"));   // true
4console.log(regex.test("123a"));  // false
  • 在需要精确匹配的场景如表单输入时,这些非常重要。

分组与捕获

通过使用括号 (),您可以提取部分值

1const text = "2025/12/29";
2const regex = /(\d{4})\/(\d{2})\/(\d{2})/;
3const [, year, month, day] = text.match(regex);
4
5console.log(year, month, day); // 2025 12 29
  • 它经常用于分解日期或结构化字符串。

常见错误与注意事项

正则表达式很强大,但容易变得难以阅读

1// Hard to read
2const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$/;
  • 如果变得过于复杂,您可以考虑添加注释、拆分表达式或对流程本身进行调整。

总结

RegExp是JavaScript中用于简洁准确描述字符串处理的基础功能。你无需一开始就学习复杂的正则表达式,根据实际需求使用testmatchreplace等基础方法和语法最为重要。如果你能够把正则表达式看作是'有组织的模式描述工具'而不是'特殊知识',将极大提升输入验证和文本处理的质量与可读性。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video