javascript正则表达式学习整理(未完)

162 阅读3分钟

将视频学习进行整理,加深记忆。

标识符:

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; //true

reg1.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(知道要找的是谁)