JavaScript 正则表达式
正则表达式(Regular Expressions,简称 RegEx 或 Regex)是一种强大的文本处理工具,它使用一种特殊的字符序列来定义搜索模式。这些模式可以用于搜索、替换或解析字符串中的文本。JavaScript 通过其 RegExp 对象提供了对正则表达式的支持。
一、正则表达式基础
字面量语法与构造函数语法:
字面量语法:
/pattern/flags构造函数语法:
new RegExp(pattern, flags)
let regex1 = /abc/; // 字面量语法 let regex2 = new RegExp('abc'); // 构造函数语法简单模式:
正则表达式可以包含普通字符(如字母、数字)和特殊字符(如
.、*、?等)。普通字符匹配它们自身。
let regex = /hello/; console.log(regex.test('hello world')); // true特殊字符:
.:匹配除换行符之外的任何单个字符。*:匹配前面的子表达式零次或多次。+:匹配前面的子表达式一次或多次。?:匹配前面的子表达式零次或一次。{n}:匹配前面的子表达式恰好 n 次。{n,}:匹配前面的子表达式至少 n 次。{n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。
let regex = /ab{2}c/; // 匹配 "abbc" console.log(regex.test('abbc')); // true字符类:
[abc]:匹配方括号内的任一字符。[^abc]:匹配不在方括号内的任一字符。[a-z]:匹配指定范围内的任一字符。[^a-z]:匹配不在指定范围内的任一字符。
let regex = /[a-z]/; // 匹配任何小写字母 console.log(regex.test('A')); // false console.log(regex.test('a')); // true锚点:
^:匹配输入字符串的开始位置。$:匹配输入字符串的结束位置。
let regex = /^hello/; // 匹配以 "hello" 开头的字符串 console.log(regex.test('hello world')); // true console.log(regex.test('world hello')); // false
二、进阶用法
分组与捕获:
():用于分组和捕获匹配的子字符串。(?:...):非捕获分组。
let regex = /(\d{4})-(\d{2})-(\d{2})/; let match = regex.exec('2023-10-05'); console.log(match[1]); // "2023" console.log(match[2]); // "10" console.log(match[3]); // "05"反向引用:
\n:其中 n 是一个数字,表示对前面第 n 个捕获组的引用。
let regex = /(\w+)\s\1/; // 匹配重复的单词 console.log(regex.test('hello hello')); // true console.log(regex.test('hello world')); // false选择、断言与懒惰匹配:
|:选择运算符,匹配左边或右边的表达式。(?=...):正向肯定断言。(?!...):正向否定断言。*?、+?、{n,m}?:懒惰匹配(尽可能少地匹配字符)。
let regex = /foo.*?bar/; // 懒惰匹配 "foo" 和 "bar" 之间的任意字符 console.log(regex.test('foobar')); // true console.log(regex.test('foo123bar')); // true,但只匹配到 "foo123bar" 中的 "foo123b"
三、标志(Flags)
i:忽略大小写。g:全局搜索。m:多行搜索。s:允许.匹配换行符(ES2018 引入)。u:启用 Unicode 完全匹配(ES6 引入)。y:粘性匹配(从目标字符串的当前位置开始匹配,ES6 引入)。
let regex = /hello/gi; // 忽略大小写并全局搜索 "hello"
let str = 'Hello world! HELLO WORLD!';
let matches = str.match(regex);
console.log(matches); // ["Hello", "HELLO"]
四、在 JavaScript 中使用正则表达式
RegExp.prototype.test(str):测试字符串是否匹配正则表达式。String.prototype.match(regex):使用正则表达式匹配字符串,并返回一个数组(包含匹配结果)。String.prototype.search(regex):使用正则表达式搜索字符串,并返回匹配项的索引。String.prototype.replace(regex, replacement):使用正则表达式替换字符串中的匹配项。String.prototype.split(regex, limit):使用正则表达式分割字符串。
let str = 'The quick brown fox jumps over the lazy dog.';
let regex = /\s+/; // 匹配一个或多个空格
let words = str.split(regex);
console.log(words); // ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]
五、总结
正则表达式是处理字符串的强大工具,它们可以大大简化复杂的文本搜索、替换和解析任务。通过掌握正则表达式的基础和进阶用法,以及如何在 JavaScript 中使用它们,你可以编写出更高效、更简洁的代码。记住,正则表达式的学习是一个渐进的过程,通过不断的实践和应用,你会逐渐掌握它们的精髓。
本文地址:https://www.tides.cn/p_js-regexp