javascript 正则表达式分组知识
封面图
•
2025-11-06
•
JavaScript
170
0
0
0
在 JavaScript 中,**正则表达式分组(Grouping)** 是一种非常强大的功能,用于将多个字符组合成一个逻辑单元。分组可以通过 **圆括号 `()`** 来实现。 --- ## 一、基本概念 ### 1. 分组的作用 - 将多个字符组合成一个整体。 - 可以对整个分组进行量词操作(如 `*`, `+`, `?` 等)。 - 可以捕获分组内容(用于提取或替换)。 --- ## 二、语法 ```javascript / (pattern) / ``` 例如: ```javascript /abc/ // 匹配 "abc" /(abc)/ // 分组匹配 "abc",并可以捕获 ``` --- ## 三、分组的用途 ### 1. 捕获分组(Capturing Groups) 使用 `()` 括起来的部分会被捕获,并可以通过 `match()` 方法访问。 ```javascript const str = "Hello, my name is John."; const regex = /name is (\w+)/; const match = str.match(regex); console.log(match[0]); // "name is John" console.log(match[1]); // "John" ``` > 注意:`match()` 返回的是一个数组,第一个元素是整个匹配结果,之后是各分组的内容。 --- ### 2. 非捕获分组(Non-capturing Groups) 如果你只是想分组但不希望捕获内容,可以使用 `(?:...)`。 ```javascript const str = "Hello, my name is John."; const regex = /(?:name is )(\w+)/; const match = str.match(regex); console.log(match[1]); // "John" ``` > 这里 `name is ` 被分组,但不会被捕获到结果中。 --- ### 3. 命名分组(Named Groups)(ES2018) 你可以给分组命名,方便后续引用。 ```javascript const str = "John Doe"; const regex = /(?<firstName>\w+) (?<lastName>\w+)/; const match = str.match(regex); console.log(match.groups.firstName); // "John" console.log(match.groups.lastName); // "Doe" ``` > 使用 `?<name>` 来命名分组。 --- ## 四、分组与量词结合使用 分组可以和量词一起使用,表示重复整个分组。 ```javascript const str = "ababab"; const regex = /(ab)+/; const match = str.match(regex); console.log(match[0]); // "ababab" ``` --- ## 五、分组的其他用法 ### 1. 选择(Alternation) 使用 `|` 表示“或”,配合分组可以限定选择范围。 ```javascript const regex = /(apple|banana|orange)/; console.log(regex.test("apple")); // true console.log(regex.test("grape")); // false ``` --- ### 2. 后向引用(Backreferences) 通过 `\1`, `\2` 等来引用前面的捕获组。 ```javascript const regex = /(\w+)\s+\1/; console.log(regex.test("hello hello")); // true console.log(regex.test("hello world")); // false ``` > 上面的正则表达式匹配两个相同的单词,中间有空格。 --- ## 六、总结 | 功能 | 语法 | 说明 | |------------------|--------------------------|--------------------------------| | 捕获分组 | `(...)` | 捕获匹配内容 | | 非捕获分组 | `(?:...)` | 不捕获内容 | | 命名分组 | `(?<name>...)` | 给分组命名 | | 选择(或) | `(a|b)` | 匹配 a 或 b | | 后向引用 | `\1`, `\2` | 引用前面的捕获组 | --- ## 七、示例代码 ```javascript // 捕获分组 const text = "The price is $19.99"; const priceRegex = /\$(\d+\.\d{2})/; const match = text.match(priceRegex); console.log(match[1]); // "19.99" // 命名分组 const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const dateStr = "2025-04-05"; const dateMatch = dateStr.match(dateRegex); console.log(dateMatch.groups.year); // "2025" // 后向引用 const duplicateRegex = /(\w+)\s+\1/; console.log(duplicateRegex.test("test test")); // true ``` --- 如果你有具体的场景或问题,我可以帮你写出更精准的正则表达式 😊
上一篇:
javascript 正则表达式
下一篇:
javascript 正则表达式 复杂分组
标题录入,一次不能超过6条
留言
评论