概念:正则表达式是对 字符串 操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,最后组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 过滤逻辑 。正则表达式通常被用来检索、替换那些符合某个模式/规则的文本。
作用:正则表达式有三个作用,分别是 匹配、提取、替换 。
特点:正则表达式的灵活性、逻辑性和功能性都特别的强,运用也非常广泛,最常见的比如爬虫,但是对于小白来说,它就比较的绕人,晦涩难懂。
组成:正则由 普通字符 和 元字符 组成。普通字符就是比如 ‘hello’、‘1234’等等,元字符就是正则表达式中有特殊意义的字符,比如‘\d’使用来匹配数字的,‘\w’用来匹配字母或数字和下划线。
一些常用的元字符:
单字符匹配: . 匹配任意一个字符,除了换行符和行结束符
\d 匹配数字 也就是0-9
\D 匹配非数字
\s 匹配空白(空格、‘\t’、‘\n’、‘\r’)
\S 匹配非空白
\w 匹配单词字符(a-z、A-Z、0-9、下划线‘_’)
\W 匹配非单词字符
[ ] 上面的都可以用[ ]来等价,比如\d 就等价于[0-9]
数量规则: * 匹配前一个字符出现的任意的次数,可以出现很多次,也可以出现零次。例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。
+ 匹配前一个字符出现一次及以上,至少得出现一次。例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。
? 匹配前一个字符出现0次或者1次。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
{m} 匹配前一个字符出现次数为m次。例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配"caaandy." 中的前两个 "a"。
{m,} 匹配前一个字符至少出现m次。例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。
{m,n} 匹配前一个字符出现m到n次。例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配"caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。
正则表达式修饰符(在表达式的末尾添加)
修饰符 可以在全局搜索中不区分大小写:
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。也就是不区分大小写 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止,查完所有的)。 |
m | 执行多行匹配。 |
RegExp 对象
在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。
使用 test()
test() 方法是一个正则表达式方法。
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
以下实例用于搜索字符串中的字符 "e":
var patt = /e/;
patt.test("The best things in life are free!");
//因为这串字符串中有‘e’,所以返回值为true
使用 exec()
exec() 方法是一个正则表达式方法。
exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
以下实例用于搜索字符串中的字母 "e":
/e/.exec("The best things in life are free!");
//字符串中含有 "e",所以该实例输出为:e