new RegExp / / 正则

正则(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就代表重复第二个子项,以此类推。

量词元字符:

{} 量词的范围

{n,m} 最小是n,最大是m,(n,m都是一个非负整数)
+ 至少一个最多不限 {1,} 最小一次,最多无限
? 最小没有,最多一次{0,1}
* 最小没有,最多无限 {0,}
 

修饰符: 
g:  global 全局匹配(找整个字符串) 
i:   ignoreCase=>忽略大小写 
m: multiline=> 多行匹配 一般是配合\n来使用的 
^:  开头 
$: 结尾 
[ ]   范围,任意取其一,范围是遵循ascll码走的。例:\w => [0-9a-zA-Z]的范围 
[^]   排除 
()    将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。 
|      将两个匹配条件进行逻辑“或”(or)运算。注意:这个元字符不是所有的软件都支持的。

正则下的方法:

    1. //.test(字符串)  检验 
      字符串中有没有正则能匹配到的内容,返回值: true false
    2. //.exec(字符串)  捕获 
      方法用于检索字符串中的正则表达式的匹配。 
      返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
    3. str.match(//) -> 把匹配到的字符放入到数组中,不匹配返回null
    4. str.replace( " " | / /(要替换谁)," " | callback(替换成什么))
●替换字符串默认的callback参数
第一个参数:  匹配到的字符
第二个参数:索引
第三个参数:整个字符串
第四个参数开始往后都是:undefined
 
●如果有() 子项、分组
第一个参数:匹配到的字符
第二个参数之后:对应每一个 子项|分组。
 
分组或者子项之后是:索引、整个字符串、 undefined
 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);
 
正则的特征: 
懒惰: 比如让找一个数字,它只会找一次,绝对不会找多次 
贪婪: 有多少找多少(尽可能的去检索)

猜你喜欢

转载自www.cnblogs.com/MrZhujl/p/9925278.html
今日推荐