【JS 正则表达式 二】标志位符号
正则表达式里提供了多个标志位符号,来匹配复杂的字符文本场景。今天来简单学习一下
- 全局匹配
- 当使用g标志时,正则表达式会在整个字符串中查找所有匹配的子串,而不仅仅是第一个匹配项。
- 忽略大小写。
- 当使用i标志时,正则表达式会忽略字符的大小写进行匹配。
- 多行匹配。
- 当使用m标志时,^和$会匹配字符串中的每一行的开始和结束位置,而不仅仅是整个字符串的开始和结束位置。
- 适用于模板字符串“或者读取文件内容
- 点号匹配所有字符。
- 当使用s标志时,点号(.)会匹配包括换行符在内的所有字符。
- Unicode模式。
- 当使用u标志时,正则表达式会将字符串视为Unicode字符序列进行匹配。
- 粘性匹配。
- 当使用y标志时,正则表达式会从lastIndex属性指定的位置开始匹配,并且只匹配从该位置开始的字符串。
- 可以通过设置lastIndex索引位置,来决定匹配的开始位置
js中的正则表达式入门
什么是正则表达式呢?
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。
说白了正则表达式就是处理字符串的,我们可以用它来处理一些复杂的字符串。
为什么要学习正则表达式
我们直接用一个例子来说明
通过比较2种方法我们明显看出在对字符串进行处理时,使用正则表达式会简单许多,所以虽然正则表达式看起来像是火星文一样的一堆乱码的东西,但我们还是有必要去学习它的。
正则表达式的创建方式
- 字面量创建方式
- 实例创建方式
字面量创建方式和构造函数创建方式的区别
- 字面量创建方式不能进行字符串拼接,实例创建方式可以
- 字面量创建方式特殊含义的字符不需要转义,实例创建方式需要转义
元字符
代表特殊含义的元字符
代表次数的量词元字符
量词出现在元字符后面 如\\d+,限定出现在前面的元字符的次数
正则中的()和[]和重复子项 //拿出来单独说一下
- 一般[]中的字符没有特殊含义 如+就表示+但是像\\w这样的还是有特殊含义的
- []中,不会出现两位数
- ()的提高优先级功能:凡是有|出现的时候,我们一定要注意是否有必要加上()来提高优先级;
- ()的分组 重复子项 (两个放到一起说)
- 当我们加()只是为了提高优先级而不想捕获小分组时,可以在()中加?:来取消分组的捕获
正则运算符的优先级
- 正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
- 相同优先级的会从左到右进行运算,不同优先级的运算先高后低。
正则的特性
- 贪婪性
所谓的贪婪性就是正则在捕获时,每一次会尽可能多的去捕获符合条件的内容。如果我们想尽可能地少的去捕获符合条件的字符串的话,可以在量词元字符后加?
- 懒惰性
懒惰性则是正则在成功捕获一次后不管后边的字符串有没有符合条件的都不再捕获。如果想捕获目标中所有符合条件的字符串的话,我们可以用标识符g来标明是全局捕获
和正则相关的一些方法
这里我们只介绍test、exec、match和replace这四个方法
- reg.test(str) 用来验证字符串是否符合正则 符合返回true 否则返回false
- reg.exec() 用来捕获符合规则的字符串
当我们用exec进行捕获时,如果正则没有加\’g\’标识符,则exec捕获的每次都是同一个,当正则中有\’g\’标识符时 捕获的结果就不一样了,我们还是来看刚刚的例子
exec的捕获还受分组()的影响
- str.match(reg) 如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
上边两个方法console的结果有什么不同呢?二个字符串是一样滴。当我们进行全局匹配时,二者的不同就会显现出来了.
当全局匹配时,match方法会一次性把符合匹配条件的字符串全部捕获到数组中,如果想用exec来达到同样的效果需要执行多次exec方法。
我们可以尝试着用exec来简单模拟下match方法的实现。
此外,match和exec都可以受到分组()的影响,不过match只在没有标识符g的情况下才显示小分组的内容,如果有全局g,则match会一次性全部捕获放到数组中
- str.replace() 这个方法大家肯定不陌生,现在我们要说的就是和这个方法和正则相关的东西了。
通过replace方法获取url中的参数的方法
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。