-
(1) 断言概念:代码中放置一些假设,通过判断假设是否为真,进而判断程序是否正确。断言就是用来测试程序中的假设是否正确的,若果假设被违反,那么就中断程序的执行
-
(2) 正则表达式表示法:
- 字面量形式,如:/\d/
- new实例化, new RegExp()
-
(3) regExp对象的修饰符
- g(全局匹配), i(不区分大小写), m(多行匹配)
-
(4)字符集合类
- 使用[],表示某一类字符的集合,如: [abc]。
'golden'.replace(/[den]/g,'Q'); // golQQQ
- 字符类取反(除开某些字符外的其他所有字符进行匹配),在字符前面加上^,如: [^abc]
'golden'.replace(/[^den]/g,'Q'); // QQQden
- 使用[],表示某一类字符的集合,如: [abc]。
-
(5)范围集合类,
- 使用 [ ] 和 - 来表示,表示某一个区间范围。
- 如:[a-zA-Z0-9-],匹配a-z,A-Z,0-9和-。
-
(6)预定义类
字符 等价类 含义 . [^\r\n] 除回车符和换行符之外的所有字符 \d [0-9] 数字字符 \D [^0-9] 非数字字符 \w [0-9a-zA-Z_] 字母、数字、下划线 \W [^0-9a-zA-Z_] 非单词、字母、下划线 \s [\t\n\x0B\f\r] 空白字符 \S [^\t\n\x0B\f\r] 非空白字符 -
(7)边界字符
- \b(是boundary的缩写) 单词边界。
- \B,非单词边界。如:'This is a boy'.replace(/\Bis\b/g,'was')
- ^ $ 以什么开头、结尾。注:如果^用在字符集合内的最前面或者范围集合内的最前面,则表示取反。
-
(8)量词(限定符,限定匹配的内容出现多少次)
? 0次或 1次。(最多一次) + 1次或多次。(至少一次) * 0次或多次。(任意次数) {n},n次 {n,m}, n到m次 {n,},至少n次 {0,n},最多n次 -
(9)贪婪模式和非贪婪模式:
- 默认都是贪婪模式匹配;在量词后面添加问号,则会进行非贪婪匹配。
- 贪婪模式:会尽可能多的匹配;如:'12345678'.replace(/\d{3,6}/g,'X'); // X78
- 非贪婪模式: 匹配最少的次数。如:'12345678'.replace(/\d{3,6}?/g,'X'); // XX78
-
(10) 分组/或/反向引用/忽略分组.分组后,用$1,$2,$3表示分组的结果。
-
分组写法:使用()可以达到分组。
'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X') // "Xd4" -
或用法:在分组内使用 | 进行或操作。
'byroncaspter'.replace(/(on|ca)/g,'X') // "ByrXXspter" -
反向引用:
捕获分组,然后用$1,$2,$3 等进行反向引用。
'2019-11-20'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1'); // "11/20/2019" -
忽略分组:在分组内加上 ?: ,可实现忽略分组。
'2019-11-20'.replace(/(\d{4})-(\d{2})-(?:\d{2})/g,'$2/$3/$1'); // "11/$3/2019"
-
-
(11)前瞻,正则表达式匹配后,后面还新增assert条件。
- 前瞻: 写法:exp(?=assert) demo: 'a1+b2+c3+d4e5+'.replace(/\w\d(?=\+)/g,'A') // "A+A+A+d4A+" - 非前瞻: 写法:exp(?!assert) demo: 'a1+b2+c3+d4e5+'.replace(/\w\d(?!\+)/g,'A') // "a1+b2+c3+Ae5+"
正则的一些属性和方法:
-
1.regExp对象的属性
-
regExp.global // m
-
regExp.ignorecase // i
-
regExp.multiline // m
-
regExp.lastIndex 用来指定下一次匹配的位置索引。lastIndex只适用于全局匹配。
-
regExp.source 正则表达式文本字符串
-
-
2.regExp方法: (2种)
-
- regExp.prototype.test(str) // 返回boolean
-
-
regExp.prototype.exec(str) // 返回数组。数组的各个元素的含义如下:
- 匹配的文本内容
- 第一个分组匹配的内容
- 第二个分组匹配的内容
- 第n个分组匹配的内容
- index: 第一次匹配内容的索引的位置;
- input: 输入的原字符串。
-
-
-
- string方法: (4种)
-
- String.prototye.search(regExp | str) // 返回第一次匹配的索引(未匹配到则返回-1)。忽略全局匹配。
'1a2b3c4d'.search('2') // 2 '1a2b3c4d'.search(/2/g) // 2。(忽略g标识符) -
- String.prototype.split(separator | regExp) // 字符串分割成数组,参数为:分隔符或者正则
// 日期分割: '2020-11/30'.split(/-|\//) '2020-11/30'.split(/[-/]/)
-
- String.prototype.replace(regExp | sourceStr, targetStr | function) // 字符串替换,可用正则来匹配替换。
-
- String.prototype.match(regExp); // 返回数组;一般用于分组匹配;类似于regExp.exec()