正则葵花宝典

preview
需积分: 0 0 下载量 108 浏览量 更新于2013-06-05 收藏 119KB DOC 举报
【正则葵花宝典】深入解析正则表达式在JavaScript中的应用 正则表达式是一种强大的文本处理工具,广泛应用于各种编程语言中,包括JavaScript。在JavaScript中,正则表达式提供了两种创建方式:使用斜杠 `/pattern/` 定义或通过 `new RegExp('pattern')` 构造函数创建。 正则表达式的核心在于模式匹配,其方法之一是 `exec()`,用于在字符串中执行匹配。`reg.exec(str)` 的工作原理是在字符串 `str` 中寻找符合正则表达式 `reg` 规则的子串。例如: ```javascript var reg = /test/; var str = 'testString'; var result = reg.exec(str); ``` 在这个例子中,`exec()` 返回的是匹配到的子串 "test",因为 "test" 符合正则表达式 `/test/` 的规则。 接下来,我们详细讨论正则表达式的一些特殊构造: 1. **重复次数**:`{n}` 表示匹配恰好 n 次,如 `/c{1}/` 匹配单个 "c",而 `/c{2}/` 匹配连续两个 "c"。 2. **范围重复**:`{m,n}` 表示匹配 m 到 n 次,例如 `/c{3,4}/` 匹配连续 3 到 4 个 "c"。如果未达到最小值 m,则匹配失败。 3. **无限制重复**:`{n,}` 表示匹配至少 n 次,如 `/c{1,}/` 匹配一个或多个 "c",而 `/c{2,}/` 匹配两个或更多 "c"。 4. **星号 ***:`*` 相当于 `{0,}`,表示零次或多次匹配,如 `/c*/` 匹配任意数量的 "c"。 5. **加号 +**:`+` 相当于 `{1,}`,表示一次或多次匹配,如 `/c+/` 匹配一个或多个 "c"。 6. **问号 ?**:`?` 相当于 `{0,1}`,表示零次或一次匹配,如 `/c?/` 匹配零个或一个 "c"。 正则表达式默认采用**贪心模式**,即尽可能匹配更多的字符。例如,在 `/c{3,4}/` 和 `'ccccTest'` 的例子中,正则表达式会匹配四个 "c" 而不是三个。 为了改变这种行为,我们可以使用**非贪心模式**,在量词后添加一个问号 `?`。例如,`/c{3,4}?/` 在相同的字符串中会匹配最少的 "c",即三个。这在处理可能有多个匹配项的情况时非常有用,防止过度匹配。 正则表达式的其他常见元字符和构造包括: - **\.**:匹配任何除换行符之外的字符。 - **\d**:匹配数字,等价于 `[0-9]`。 - **\D**:匹配非数字字符,等价于 `[^0-9]`。 - **\w**:匹配字母、数字、下划线,等价于 `[a-zA-Z0-9_]`。 - **\W**:匹配非单词字符,等价于 `[^a-zA-Z0-9_]`。 - **^**:匹配行首。 - **$**:匹配行尾。 - **\[...\]**:字符集,匹配括号内任意一个字符。 - **|**:选择符,匹配前后任意一项。 - **()**:分组,将多个字符或表达式作为一个整体来匹配。 此外,还可以使用预查否定 `(?!)` 和预查肯定 `(?=)` 来进行前瞻匹配,以及反向预查 `(?!...)` 进行后瞻匹配。 掌握正则表达式的关键在于理解各种元字符、量词和构造的组合,以及它们在实际问题中的应用。熟练运用正则表达式,能够极大地提高文本处理和数据提取的效率。通过不断实践和学习,你可以成为正则表达式的高手,解决各种复杂的文本匹配需求。