JavaScript 中的正则表达式(Regular Expressions,简称 RegEx)是一种描述字符模式的对象,用于在字符串中进行模式匹配和替换操作。正则表达式在很多编程语言中都有广泛应用,而在 JavaScript 中,正则表达式主要通过两个对象实现:RegExp
对象和 String
对象上的一些方法。
基本语法
正则表达式通常用斜杠 /
包围,例如 /pattern/
。它也可以通过 RegExp
构造函数来创建,例如 new RegExp('pattern')
。
修饰符
i
:不区分大小写。g
:全局匹配(找到所有匹配项,而不是在找到第一个匹配项后停止)。m
:多行匹配。
例如,/abc/i
表示不区分大小写地匹配字符串 "abc"。
常见元字符
.
:匹配除换行符以外的任何单个字符。^
:匹配输入的开始。$
:匹配输入的结束。*
:匹配前面的子表达式零次或多次。+
:匹配前面的子表达式一次或多次。?
:匹配前面的子表达式零次或一次。{n}
:匹配前面的子表达式恰好 n 次。{n,}
:匹配前面的子表达式至少 n 次。{n,m}
:匹配前面的子表达式至少 n 次,至多 m 次。[...]
:匹配括号内的任意字符。|
:匹配左侧或右侧的子表达式(或操作)。
常见字符类
\d
:匹配一个数字字符,等价于[0-9]
。\D
:匹配一个非数字字符,等价于[^0-9]
。\w
:匹配一个单词字符(字母、数字或下划线),等价于[A-Za-z0-9_]
。\W
:匹配一个非单词字符,等价于[^A-Za-z0-9_]
。\s
:匹配一个空白字符,包括空格、制表符、换页符等,等价于[ \f\n\r\t\v]
。\S
:匹配一个非空白字符,等价于[^ \f\n\r\t\v]
。
使用方法
正则表达式主要用于以下几种操作:
-
测试:检查字符串是否与模式匹配。
javascriptlet regex = /hello/i; console.log(regex.test("Hello World")); // true
-
搜索:在字符串中查找匹配项。
javascriptlet str = "Hello World"; let match = str.match(/world/i); console.log(match); // ["World"]
-
替换:用新的子字符串替换匹配的子字符串。
javascriptlet str = "Hello World"; let newStr = str.replace(/world/i, "JavaScript"); console.log(newStr); // "Hello JavaScript"
-
提取:根据正则表达式提取子字符串。
javascriptlet str = "Hello 2024!"; let year = str.match(/\d+/); console.log(year[0]); // "2024"
实际应用
- 表单验证:验证用户输入的邮箱、电话号码、邮政编码等格式是否正确。
- 文本搜索和替换:如在文本编辑器中查找和替换特定模式的文本。
- 数据清理:清除数据中的多余空格、标点符号或其他不需要的字符。
- 日志分析:从日志文件中提取特定信息,如日期、时间、IP 地址等。
示例
-
验证邮箱地址:
javascriptfunction validateEmail(email) { let regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return regex.test(email); } console.log(validateEmail("example@example.com")); // true
-
提取 URL 中的参数:
javascriptlet url = "http://example.com/?name=John&age=30"; let params = {}; url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(match, key, value) { params[key] = value; }); console.log(params); // { name: "John", age: "30" }
正则表达式在文本处理和数据验证中非常强大,但由于其语法复杂,需要一些练习和经验才能熟练掌握和应用。