读书的时候看到同学借了一本书在看,大约有三四厘米那么厚,名字就叫正则表达式。
正则表达式(Regular Expressions, 简称 regex 或 regexp)是一种强大的文本处理工具,用于字符串的模式匹配。它们可以用来搜索、编辑或操作文本。
比如JavaScript 支持正则表达式,并且在很多地方都可以看到它的应用,比如表单验证、数据清洗等。
初级用法
基本匹配
最基本的用法是查找字符串中是否包含某个模式。例如,检查一个字符串中是否包含字母 "a":
const string = "apple";
const regex = /a/;
console.log(regex.test(string)); // 输出: true
字符类
字符类可以匹配一组字符中的任何一个。例如,匹配任何数字:
const string = "The price is 100 dollars.";
const regex = /\d/; // \d 匹配任何数字
console.log(string.match(regex)); // 输出: ["1"]
中级用法
量词
量词定义了匹配模式出现的次数。例如,匹配至少两个连续的数字:
const string = "There are Ⅱ people here.";
const regex = /\d{2}/; // {2} 表示前面的元素恰好出现两次
console.log(string.match(regex)); // 输出: null (因为没有两个连续的数字)
分组和捕获
分组允许将多个元素当作一个单元来处理,并且可以通过捕获引用这些组。例如,交换名字和姓氏:
const fullName = "John Doe";
const regex = /(\w+)\s+(\w+)/;
const swappedName = fullName.replace(regex, '$2, $1'); // $1 和 $2 是捕获组
console.log(swappedName); // 输出: "Doe, John"
高级用法
回调函数
在替换操作中,可以使用回调函数来进行更复杂的逻辑处理。例如,将所有的美元金额转换成欧元(假设汇率为1 USD = 0.9 EUR):
const text = "The price is $100 and the discount is $20.";
const regex = /\$\d+/g;
const convertedText = text.replace(regex, (match) => {
const amount = parseInt(match.slice(1), 10);
return `€${(amount * 0.9).toFixed(2)}`;
});
console.log(convertedText); // 输出: "The price is €90.00 and the discount is €18.00."
断言
断言(Lookahead 和 Lookbehind)允许匹配某些模式,但不消耗字符串中的字符。例如,仅匹配单词 "cat",但不匹配 "catch" 或 "category":
const string = "I have a cat, but not a category or catch.";
const regex = /\bcat\b(?![a-z])/; // \b 是单词边界,(?![a-z]) 是负向前瞻断言
console.log(string.match(regex)); // 输出: ["cat"]
通过这些例子,我们可以看到正则表达式的强大之处在于其灵活性和广泛的应用场景。从简单的文本匹配到复杂的文本处理任务,正则表达式都能够胜任。不过,随着复杂性的增加,正则表达式的可读性和维护性可能会下降,因此在编写复杂的正则表达式时需要格外小心。
该文章在 2024/12/5 15:59:39 编辑过