将视频学习进行整理,加深记忆。
标识符:
g: global 全局 i: ignore case 忽略大小写 m: multiline 多行匹配[]代表类:
1、[abc]:字符类'a1b2c3d3'.replace(/[abc]/g, 'X'):匹配字符串中包含a或b或c,替换为'X'。g:特殊元字符,代表全局的,不加g匹配到第一个就停止。i:大小写不敏感。 2、[a-zA-Z0-9]:范围类'a1b2c3D4'.replace(/[a-z]/gi, 'Q'):全局匹配大小写[a-zA-Z],替换为'Q'预定义类:
边界字符:
量词:
量词阅读题:\d{20}\w\d?\w+\d*\w{3}\d{3,5}\w{3,}
贪婪模式:
\d{3,6} 尽可能多的匹配非贪婪模式:
在量词后加?就可以了。分组:
用()可以达到分组的功能。 例: "ByronByronByronByron".replace(/Byron{3}/g, 'X') 字母n重复三次匹配 "ByronByronByronByron".replace(/(Byron){3}/g, 'X') 单词Byron重复三次匹配或:
Byron | Caspar 作用于 on 和 Ca : 'ByronsparByrCaspar'.replace(/Byr(on) | (Ca)spar/g, 'X')反向引用:
怎么理解看个需求: 2020-07-22 =》 07/22/2020 即替换的是本身的’变量‘ $1 $2 $3 捕获分组又叫分组捕获 '2020-07-22'.replace(/(\d{4})-(\d{2}-\d{2})/g, '$2/$3/$1');忽略分组:
在分组内加?:就可以了。 例:(?:Byron).(ok) 这样Byron分组被忽略前瞻和后顾(后瞻)---这里说明一下javascript不支持后顾,以下不做笔记。
前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言(规则)。 符合和不符合特定断言成为肯定/正向匹配和否定/负向匹配。例:\w(?=\d) 'a23'.replace(/\w(?=\d)/g, 'X') => X23。注意 (?=\d) 仅作为断言不参与匹配进行替换。
对象属性:
global: 是否全文搜索,默认false,只读 ignore case: 是否大小写敏感,默认false,只读 multiline: 多行搜索,默认false,只读 lastIndex: 是当前表达式匹配内容的 最后一个字符的 下一位置 source: 正则表达式的文本字符串 例:var reg1 = /\w/; var reg2 = /\w/gim; reg2.global; //true reg2.ignoreCase; //true reg2.multiline; //truereg1.global; //false reg1.ignoreCase; //false reg1.multiline; //false reg1.global = true; //true reg1.global; //false---只读的不可修改赋值
reg1.source; // '/\w/'
相关方法:
1、test(RegExp.prototype.test(str)): 用于测试字符串参数中是否存在匹配正则表达式模式的字符串,存在返回true,否则返回false 例:var reg1 = /\w/; var reg2 = /\w/g; reg1.test('a'); //true reg1.test(('$')); //false注意:
reg2.test('ab'); //true reg2.test('ab'); //true reg2.test('ab'); //false---第三遍为false了,lastIndex属性在作怪。while(reg2.test('ab')){ console.log(reg2.lastIndex); } // 1,2 可以用(/\w/).test('ab')方式解决,但不建议使用,因为每次实例化对象时都需要内存开销。 如果只判断该字符串规则匹配是否存在,用test就够了,如果需要更多信息则使用另一个方法 exec(str); 2、exec(RegExp.prototype.exec(str)): 使用正则表达式对字符串进行搜索,并将更新全局RegExp对象的属性以反应匹配结果。 如果没有匹配的文本则返回null,否则返回一个结果数组(该数组有两个属性): -index 声明匹配文本的第一个字符的位置(知道从那开始匹配的) -input 存放被检索的字符串的string(知道要找的是谁)