正则(RegExp)
定义:正确的规则 它是专门来操作(检:检查,索:搜索)(模糊范围的)字符串的一种规则。
简写: /规则和字符串(不带引号的字符串)/ /d/
标准写法: new RegExp ( // || 带引号的字符串 , 修饰符 )
第一个参数:可以放字符串或者正则,注意:如果是字符串形式的元字符,记得要转意。
第二个参数:修饰符
一般是遇到 变量或者参数 的时候,用标准写法。
转义符:
可以带任意的符号,只不过有些符号是有特殊含义的
元字符:(普通元字符:在正则当中,字面量方式创建的,两个斜杠中,除了特殊元字符和量词元字符以外的字符都叫做普通元字符)
特殊元字符:
匹配一个换行符
匹配一个回车符
f 匹配一个换页符
匹配一个制表符
v 匹配一个垂直制表符
x
…….
d :匹配0-9之间的任意一个数字
D :除了0-9之间的任意字符
w :匹配数字、字母、下划线,中的任意一个字符,[0-9a-zA-Z]
W :除了数字,字母,下划线以外的任意字符
: 匹配一个边界 ‘box tag’ (文字是没有边界的,比如:你好,中文的感叹号!。)
B:除了边界以外的其他字符
s 匹配任何不可见字符,包括空格、制表符、换页符等等
S 匹配任何可见字符
. 点 匹配除“
”和”
”之外的任何单个字符。
um 重复子项: 1就代表重复第一个子项(只重复一次)。如果有第二个()子项,那么2就代表重复第二个子项,以此类推。
量词元字符:
{} 量词的范围
修饰符:
g: global 全局匹配(找整个字符串)
i: ignoreCase=>忽略大小写
m: multiline=> 多行匹配 一般是配合
来使用的
^: 从字符串开头进行匹配
$: 从字符串末尾进行匹配
[ ] 范围,任意取其一,范围是遵循ascll码走的。例:w => [0-9a-zA-Z]的范围
中文的范围:[ u4e00 - u9fa5 ] (记忆:有事100,有酒罚我)
[^] 排除
() 将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 1 到9 的符号来引用。
| 将两个匹配条件进行逻辑“或”(or)运算。注意:这个元字符不是所有的软件都支持的。
正则下的方法:
- //.test(字符串) 检验
字符串中有没有正则能匹配到的内容,返回值: true false - //.exec(字符串) 捕获
方法用于检索字符串中的正则表达式的匹配。
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 - str.match(//) -> 把匹配到的字符放入到数组中,不匹配返回null
- str.replace( " " | / /(要替换谁)," " | callback(替换成什么))
1 //找到字符串中哪个字母出现的次数最多,出现了几次?
2 let str = 'dnsasudhusadssasdgsjdgddsjsddhaslfdiusadlhsdsfudahsful';
3 let n = -Infinity; //负无穷大
4 let name = '';
5 let str2 = str.split('').sort().join('');
6
7 str2.replace(/([a-z])1+/g,function($0,$1){ //$0本次匹配的字符,$1,第一个分组
8 if(n < $0.length){
9 n = $0.length;
10 name = $1;
11 }
12 });
13 console.log(n,name);
懒惰: 比如让找一个数字,它只会找一次,绝对不会找多次
贪婪: 有多少找多少(尽可能的去检索)