JavaScript正则表达式
一、正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式的特点是:
- 灵活性、逻辑性和功能性非常强;
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 对于刚接触的人来说,比较晦涩难懂。
二、元字符
元字符是构造正则表达式的一种基本元素。有了元字符之后,我们就可以利用这些元字符来写一些简单的正则表达式了。
常用元字符
| 元字符 | 说明 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配数字、字母、下划线、汉字 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
三、重复限定符
为了处理这些重复问题,正则表达式中一些重复限定符,把重复部分用合适的限定符替代。
常用重复限定符
| 元字符 | 说明 |
|---|---|
| * | 重复0次或多次 |
| + | 重复1次或多次 |
| ? | 重复0次或1次 |
| {n} | 重复n次 |
| {n,} | 重复n次或多次 |
| {n,m} | 重复n次到m次 |
四、分组
正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。
五、转义
正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简答,就是在要转义的字符前面加个斜杠,也就是\即可。
六、条件或
正则用符号 | 来表示或,也叫做分支条件,当满足正则里的分支条件的任何一种条件时,都会当成是匹配成功。
七、区间
正则提供一个元字符中括号 [] 来表示区间条件。
- 限定0到9 可以写成[0-9]
- 限定A-Z 写成[A-Z]
- 限定a-z 写成[a-z]
- 限定某些数字 [165]
- 限定一个退格符[\b]
八、断言与零宽
断言: 正则表达式中的断言,就是说正则可以指明在指定的内容的前面或后面会出现满足指定规则的内容
零宽: 就是没有宽度,在正则表达式中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身。正则表达式中的断言都是零宽断言。
| 断言语法 | 断言作用 |
|---|---|
| (?=exp) | 正向先行断言,匹配exp表达式的前面内容,不返回本身 |
| (?<=exp) | 正向后行断言,匹配exp表达式的后面内容,不返回本身 |
| (?!exp) | 负向先行断言,匹配非exp表达式的前面内容,不返回本身 |
| (?<!exp) | 负向后行断言,匹配非exp表达式的后面内容,不返回本身 |
九、捕获与非捕获
捕获,是指匹配表达式,但捕获通常和分组联系在一起,也就是“捕获组”,捕获组匹配子表达式的内容,把匹配结果保存到内存中中数字编号或显示命名的组里,以深度优先进行编号,之后可以通过序号或名称来使用这些匹配结果。
| 捕获语法 | 捕获作用 |
|---|---|
| (exp) | 数字编号捕获组,从表达式左侧开始,每出现一个左括号和它对应的右括号之间的内容为一个分组,在分组中,第0组为整个表达式,第一组开始为分组。 |
| (?< name >exp) | 命名编号捕获组,从表达式左侧开始,每出现一个左括号和它对应的右括号之间的内容为一个分组,在分组中,第0组为整个表达式,第一组开始为分组。分组的命名由表达式中的name指定 |
| (?:exp) | 和捕获组刚好相反,它用来标识那些不需要捕获的分组。 |
十、反义
元字符是表示要匹配什么,当然如果你想反着来,不想匹配某些字符,正则也提供了一些常用的反义元字符。
常用反义元字符
| 反义元字符 | 说明 |
|---|---|
| \W | 匹配数字、字母、下划线、汉字 |
| \S | 匹配任意的空白符 |
| \D | 匹配数字 |
| \B | 匹配单词的开始或结束 |
| [^X] | 匹配除X以外的任意字符 |
| [^aeiou] | 匹配除aeiou以外的任意字符 |
十一、JavaScript RegExp(正则表达式)对象
JavaScript 字符串是在编程中使用最多的一种数据类型,很多地方都需要对字符串进行操作。对字符串操作就需要借助 RegExp 对象来使用正则表达式。
创建RegExp对象:
var patt = new RegExp(exp, modifiers);
var patt = /exp/modifiers;
参数说明如下:
- exp:正则表达式,按照正则表达式的语法定义的正则表达式;
- modifiers:修饰符,用来设置字符串的匹配模式;
修饰符可选值
| i | 执行对大小写不敏感的匹配 |
| g | 执行全局匹配(查找所有的匹配项,而非在找到第一个匹配项后停止) |
| m | 执行多行匹配 |
| s | 允许使用 . 匹配换行符 |
| u | 使用 Unicode 码的模式进行匹配 |
| y | 执行“粘性”搜索,匹配从目标字符串的当前位置开始 |
注意:正则表达式中的特殊字符有时需要转义,即在特殊字符前加反斜杠 \,例如 \ \w+。
使用正则表达式
JavaScript RegExp 对象中提供了一些列方法来执行正则表达式
| 方法 | 描述 |
|---|---|
| exec() | 在字符串搜索匹配项,并返回一个数组,若没有匹配项则返回 null |
| test() | 测试字符串是否与正则表达式匹配,匹配则返回 true,不匹配则返回 false |
| toString() | 返回表示指定对象的字符串 |
此外 String 对象中也提供了一些方法来执行正则表达式,如下表所示:
| 方法 | 描述 |
|---|---|
| search() | 在字符串中搜索匹配项,并返回第一个匹配的结果,若没有找到匹配项则返回 -1 |
| match() | 在字符串搜索匹配项,并返回一个数组,若没有匹配项则返回 null |
| matchAll() | 在字符串搜索所有匹配项,并返回一个迭代器(iterator) |
| replace() | 替换字符串中与正则表达式相匹配的部分 |
| split() | 按照正则表达式将字符串拆分为一个字符串数组 |
function show(){
var str="JavaScript";
var reg = /[a-g]/g;
document.write(reg.exec(str) + "<br>");
document.write(reg.test(str) + "<br>");
document.write(reg.toString() + "<br>");
document.write(str.search(reg) + "<br>");
document.write(str.match(reg) + "<br>");
document.write(str.matchAll(reg) + "<br>");
document.write(str.replace(reg, "+") + "<br>");
document.write(str.split(reg) + "<br>");
}

本文详细介绍了JavaScript中的正则表达式,包括元字符、重复限定符、分组、转义、条件或、区间、断言与零宽、捕获与非捕获、反义等核心概念,并探讨了如何在JavaScript中使用RegExp对象进行字符串操作,如exec()、test()、toString()等方法。同时,讲解了字符串的方法如search()、match()、replace()和split()在正则表达式中的应用。
885

被折叠的 条评论
为什么被折叠?



