创建正则表达式
- 字面量方式创建 var reg = /abcd/
- 内置构造函数创建 var reg = new RegExp(“abcd”,“gi”)
两种创建方式的区别
- 语法不一样
- 书写标识符的时候
=>字面量方式直接书写在正则的后面
=>内置构造函数,以第二个参数的方式传递 - 拼接字符串
=>字面量方式不接受拼接字符串
=>内置构造函数方式,可以拼接字符串 - 基本元字符书写
=>字面量方式的时候,直接书写\s\d\w
=>内置构造函数,书写\ \s\ \d\ \w
为什么内置函数构造需要书写双斜线
因为字符串中\是转义符,那么当你书写字符串\s的时候,\就会把s转换成有意义的特殊内容,因为字符串中确实没有\s组成的特殊意义字符,所有就变成了一个单独的字母s
解决问题
=> 使用\把有意义的特殊字符 \转换成没有意义的文本\
常用方法
-
test() 匹配
语法:正则表达式.test(“要检测的字符串”)
返回值:布尔值
如果该字符串符合正则的规则,那么就是true,否则为false -
exex() 捕获
语法:正则.exec(字符串)
作用:从 字符串中 把满足正则条件的部分获取出来
返回值:-
原始字符中没有符合正则要求的字符串片段,null
-
原始字符串中符合正则要求的片段
-
正则没有() 也没有 全局标识符g 返回值为数组,索引0是从字符串中捕获出来的满足正则条件的第一个内容
特点:不管捕获多少次,每次都是从原始字符串的索引0开始检索 -
正则有全局标识符g, 返回值是一个数组
索引0是从字符串中捕获出来的满足正则条件的第一个内容
注意:第二次捕获是从第一次的结束位置开始向后查询,直到最后捕获不到为止,再下一次的时候,又从字符串的索引0开始检索 -
有(),返回值是一个数组
索引0是从字符串中捕获出来的满足正则条件的第一个内容
从索引1开始,一次是每一个小括号的单独内容
()有两个意义 1. 一个整体 2. 单独捕获
如果想要使用一个意义,整体的所用,不想再捕获的时候单独捕获出来,可以写成(?:)匹配但不捕获
-
-
正则表达式的符号 - 基本元字符
元字符 =》所有的文本内容
=》特殊符号,用符号表示一类内容
- \d 表示一位 数字
- \D 表示一位 非数字
- \s 表示一位 空白内容(空格/缩进/制表符/…)
- \S 表示一位 非空白内容
- \w 表示一位 **数字(0-9)字母(a-z A-Z)下划线(_)**中人的任意一个
- \W 表示一位 非数字字母下划线中的任意一个
- . 表示一位 非换行以外的任意内容 \n表示换行
- \ 表示转义符
把有意义的符号转换成没有意义的普通文本
把没有意义的文本转换成有意义的符号
元字符 - 边界符号
9. ^ 表示字符串开始
10. $ 表示字符串结尾
元字符 - 限定符
注意:一个限定符智能修饰符号前面的一个内容的出现次数
11. * 表示出现 0- 多次
12. + 表示出现1 - 多次
13. ? 表示出现 0 - 1次
14. {n} 表示出现指定多少次
15. {n,} 表示出现至少多少次
{0,} 等价于*
{1,}等价于+
16. {n,m}表示出现n~m次
{0,1} 等价于 ?
元字符 - 特殊符号
17. () 意义1:一个整体 意义2:单独捕获()
18. | 或者的意思 或的边界,要么是(),要么就到正则的边界
19. [] 包含
注意:一个[]内可以写多个内容,但是一个[]只占一个字符位置,表示[]内任意一个均行
[0-9]等价于\d
[0-9a-zA-Z] 等价于 \w
20. [^] 非
一个[ ^ ] 内可以写多个内容,但是一个[ ^ ]只占一个字符位置,表示【^】内的任意一个都不行
[^0-9] 等价于\D
[^0-9a-zA-Z]等价于\W
21. - 中划线 到 至
注意: 需要和[]或者[^]连用
需要ASCII编码连着才行
标识符
书写在正则表达式外面,专门用来修饰整个正则表达式的符号
- i(ignore)
=>表示忽略大小写不计
var reg = /abcd/i - g(global)
全局:
正则的两大特性
- 懒惰性
=> 每一次捕获都是从原始字符串的索引0位置开始检索
=> 解决:使用全局标识符g - 贪婪性
=> 贪婪匹配:能拿多少拿多少 尽可能多的匹配内容
=> 非贪婪匹配:能拿到多少拿多少 尽可能少的匹配内容
=> 需要使用非贪婪匹配字符
=> 在原先的限定符后面再写一个?
*? 0 -多次,但是0次能解决问题,就不再多
+? 1-多次,但是1次能解决问题,就不再多
?? 0-1次,0次能解决问题,就不去管1次
{n,}?
{n,m}?
字符串和正则合作的方法
- replace
语法:字符串.replace(‘换下字符’,‘换上字符’)
字符串.replace(正则表达式,‘换上字符’)
返回值:替换好的字符串
=> 当你的第一个参数传递字符串的时候,只能替换一个
=> 当你的第一个参数传递的是正则表达式的时候,只能替换一个
=> 但是如果你的正则表达式有全局标识符g,那么有多少替换多少 - search
语法:字符串.search(字符串片段)
字符串.search(正则表达式)
作用:在原始字符串内查找指定内容
返回值:
=> 原始字符串内有指定内容,那么就是这个内容的索引
=> 原始字符串内无指定内容,那么就是 -1 - match()
语法:字符串.match(字符串片段)
字符串.match(正则表达式)
返回值:从原始字符串中捕获满足条件的片段
注意:如果你的参数传递的是字符串或者没有全局标识符g的正则,那么和exec返回值一模一样
=> 当你的正则有全局标识符g的时候,那么返回值是一个数组
=> 能从原始字符串内捕获多少,数组里就有多少内容