javascript 正则表达式
封面图
•
2025-11-27
•
JavaScript
166
0
0
0
JavaScript 中的正则表达式(Regular Expression)是一种用于匹配字符串模式的强大工具。你可以使用 `RegExp` 对象或字面量语法来创建正则表达式。 --- ## ✅ 一、基本语法 ### 1. 字面量写法: ```javascript /正则表达式/修饰符 ``` **示例:** ```javascript let pattern = /hello/; ``` ### 2. 构造函数写法: ```javascript new RegExp('正则表达式', '修饰符'); ``` **示例:** ```javascript let pattern = new RegExp('hello'); ``` --- ## ✅ 二、常用修饰符(Flags) | 修饰符 | 含义 | |--------|------| | `g` | 全局匹配(global) | | `i` | 忽略大小写(case-insensitive) | | `m` | 多行匹配(multiline) | | `s` | 让 `.` 匹配包括换行符在内的所有字符(ES2018 引入) | | `y` | 粘性匹配(sticky) | **示例:** ```javascript let pattern = /hello/gi; // 匹配所有不区分大小写的 "hello" ``` --- ## ✅ 三、常用元字符(Metacharacters) | 元字符 | 含义 | |--------|------| | `\d` | 匹配任意数字(等价于 `[0-9]`) | | `\D` | 匹配任意非数字 | | `\w` | 匹配字母、数字、下划线(等价于 `[a-zA-Z0-9_]`) | | `\W` | 匹配非字母、数字、下划线 | | `\s` | 匹配空白字符(空格、换行、制表符等) | | `\S` | 匹配非空白字符 | | `^` | 匹配开头 | | `$` | 匹配结尾 | | `.` | 匹配除换行符外的任意字符 | | `*` | 前一个字符出现 0 次或多次 | | `+` | 前一个字符出现 1 次或多次 | | `?` | 前一个字符出现 0 次或 1 次 | | `[]` | 匹配括号内的任意一个字符 | | `()` | 分组,捕获内容 | | `|` | 或(选择) | --- ## ✅ 四、常用方法 ### 1. `test()` 方法 检查字符串是否匹配正则表达式,返回布尔值。 ```javascript let pattern = /hello/; console.log(pattern.test("hello world")); // true ``` ### 2. `match()` 方法 在字符串中查找匹配项,返回数组或 `null`。 ```javascript let str = "hello world"; let result = str.match(/hello/); console.log(result); // ["hello"] ``` ### 3. `replace()` 方法 替换字符串中匹配的部分。 ```javascript let str = "hello world"; let newStr = str.replace(/hello/, "hi"); console.log(newStr); // "hi world" ``` ### 4. `split()` 方法 根据正则表达式分割字符串。 ```javascript let str = "apple, banana, cherry"; let parts = str.split(/,\s*/); console.log(parts); // ["apple", "banana", "cherry"] ``` ### 5. `search()` 方法 查找匹配项的位置(索引),返回第一个匹配位置。 ```javascript let str = "hello world"; let index = str.search(/world/); console.log(index); // 6 ``` --- ## ✅ 五、常见正则表达式示例 | 场景 | 正则表达式 | |------|-------------| | 匹配邮箱 | `/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/` | | 匹配手机号(中国) | `/^1[3-9]\d{9}$/` | | 匹配日期(YYYY-MM-DD) | `/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/` | | 匹配 HTML 标签 | `/<([a-z]+)>.*<\/\1>/i` | | 匹配 URL | `/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/` | --- ## ✅ 六、进阶技巧 ### 1. 非捕获分组 `(?:...)` ```javascript let pattern = /(abc)(?:def)/; // 只捕获 "abc",不捕获 "def" ``` ### 2. 前向断言(Lookahead) - **正向前瞻**:`(?=...)` —— 匹配后面是某个模式的内容。 - **负向前瞻**:`(?!...)` —— 匹配后面不是某个模式的内容。 **示例:** ```javascript let pattern = /\b\w+(?=ing\b)/; // 匹配以 "ing" 结尾的单词(如 "running" 中的 "run") ``` ### 3. 贪婪与懒惰匹配 - **贪婪**:默认行为(尽可能多匹配) - **懒惰**:加 `?`(尽可能少匹配) **示例:** ```javascript let str = "<div>Hello</div>"; let greedy = str.match(/<.*>/); // ["<div>Hello</div>"] let lazy = str.match(/<.*?>/); // ["<div>", "</div>"] ``` --- ## ✅ 七、注意事项 - 使用 `new RegExp()` 时,要对特殊字符进行转义(如 `\`)。 - 在字符串中使用 `\` 时,需要写成 `\\`。 - 如果你从用户输入构建正则表达式,请务必进行过滤和转义,防止注入攻击。 --- 如果你有具体的正则表达式需求(比如验证电话号码、提取链接等),可以告诉我,我可以帮你写一个合适的正则表达式 😊
上一篇:
javascript 正则表达式 反向引用
下一篇:
javascript 正则表达式 非捕获性分组
javascript 正则表达式 候选
标题录入,一次不能超过6条
留言
评论