正则(RegExp)
定义:正确的规则 它是专门来操作(检:检查,索:搜索)(模糊范围的)字符串的一种规则。
简写: /规则和字符串(不带引号的字符串)/ /d/
标准写法: new RegExp ( // || 带引号的字符串 , 修饰符 )
转义符: \
\ 可以带任意的符号,只不过有些符号是有特殊含义的
元字符:(普通元字符:在正则当中,字面量方式创建的,两个斜杠中,除了特殊元字符和量词元字符以外的字符都叫做普通元字符)
特殊元字符:
\n 匹配一个换行符
\r 匹配一个回车符
\f 匹配一个换页符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\x
…….
\d :匹配0-9之间的任意一个数字
\D :除了0-9之间的任意字符
\w :匹配数字、字母、下划线,中的任意一个字符,[0-9a-zA-Z]
\W :除了数字,字母,下划线以外的任意字符
\s :匹配一个空白字符 / /
\S:除了空白字符以外的其他字符
\b: 匹配一个边界 ‘box tag’
\B:除了边界以外的其他字符
\s 匹配任何不可见字符,包括空格、制表符、换页符等等
\S 匹配任何可见字符
. 点 匹配除“\n”和”\r”之外的任何单个字符。
\num 重复子项: \1就代表重复第一个子项(只重复一次)。如果有第二个()子项,那么\2就代表重复第二个子项,以此类推。
量词元字符:
{} 量词的范围
修饰符:
g: global 全局匹配(找整个字符串)
i: ignoreCase=>忽略大小写
m: multiline=> 多行匹配 一般是配合\n来使用的
^: 开头
$: 结尾
[ ] 范围,任意取其一,范围是遵循ascll码走的。例:\w => [0-9a-zA-Z]的范围
[^] 排除
() 将( 和 ) 之间的表达式定义为“组”(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);
懒惰: 比如让找一个数字,它只会找一次,绝对不会找多次
贪婪: 有多少找多少(尽可能的去检索)