new RegExp / / 正则


正则(RegExp)

定义:正确的规则 它是专门来操作(检:检查,索:搜索)(模糊范围的)字符串的一种规则。
简写: /规则和字符串(不带引号的字符串)/ 比如:/d/
标准写法: new RegExp ( // || 带引号的字符串 , 修饰符 )

  • 第一个参数:可以放字符串或者正则,注意:如果是字符串形式的元字符,记得要转意。
  • 第二个参数:修饰符
  • 一般是遇到 变量或者参数 的时候,用标准写法。

正则表达式是由 多种元字符 与 运算符 组成的。

1. 元字符

1.1 普通字符

例如:
小写字符 a 到 z
大写字符 A 到 Z
数字 0 到 9
符号

1.2 特殊字符
字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control - M 或回车符。x 的值必须为 A - Z 或 a - z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\s 匹配任何不可见字符(空白符),包括:空格、制表符、换页符等等
\S 匹配任何可见字符(非空白符)。不包括换行。
.点 匹配除\n\r之外的任何单个字符。相等于 [^\n\r]
\d 匹配0-9之间的任意一个数字
\D 除了0-9之间的任意字符
\w 匹配数字、字母、下划线,中的任意一个字符,相等于 [0-9a-zA-Z]
\W 除了数字,字母,下划线以外的任意字符
\b 匹配一个边界 ‘box tag’ (文字是没有边界的,比如:你好,中文的感叹号!。)
\B 除了边界以外的其他字符
\num 重复子项: \1就代表重复第一个子项(只重复一次)。如果有第二个()子项,那么\2就代表重复第二个子项,以此类推。

2. 运算符

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
` `
2.1 转义符

\可以带任意的符号,只不过有些符号是有特殊含义的

2.2 限定符:
字符 描述
{} 量词的范围,例如:{n,m}最小是n,最大是m,(n,m都是一个非负整数)
+ 号代表前面的字符必须至少出现一次(1次或多次)。 等效于 {1,}
? 号代表前面的字符出现(0次、或1次)。 等效于 {0,1}
* 号代表前面的字符出现任意次(0次、或1次、或多次)。等效于 {0,}
2.3 修饰符:
字符 描述
g global 全局匹配(找整个字符串)
i ignoreCase=>忽略大小写
m multiline=> 多行匹配 一般是配合\n来使用的
s 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。
^ 从字符串开头进行匹配
$ 从字符串末尾进行匹配
[ ] 范围,任意取其一,范围是遵循ascll码走的。例:\w => [0-9a-zA-Z]的范围,中文的范围:[ \u4e00 - \u9fa5 ] (记忆:有事100,有酒罚我)
[^] 排除
() () 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '(' 或 ')'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 `(
(?=pattern) 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,`"Windows(?=95
(?!pattern) 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如`"Windows(?!95
(?<=pattern) 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,`"(?<=95
(?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反。例如`"(?<!95
` `

3. 正则的方法:

//.test(字符串) ,字符串中有没有正则能匹配到的内容,返回值: true false
//.exec(字符串) ,方法用于检索字符串中的正则表达式的匹配,返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

4. 字符串中与正则有关的方法:

str.match(//),把匹配到的字符放入到数组中,不匹配返回null
str.replace( " " | / /(要替换谁)," " | callback(替换成什么)),callback 回调函数的特性:每匹配到一次就,调用一次函数

4.1 替换字符串默认的callback参数

第一个参数:匹配到的字符
第二个参数:索引
第三个参数:整个字符串
第四个参数开始往后都是:undefined

4.2 如果有() 子项、分组

第一个参数:匹配到的字符
第二个参数之后:对应每一个 子项|分组。
分组或者子项之后是:索引、整个字符串、undefined

举例:找到字符串中哪个字母出现的次数最多,出现了几次?

let str = 'dnsasudhusadssasdgsjdgddsjsddhaslfdiusadlhsdsfudahsful';
let n = -Infinity; //负无穷大
let name = '';
let str2 = str.split('').sort().join('');
str2.replace(/([a-z])\1+/g,function($0,$1){ // $0=>本次匹配的字符,$1=>第一个分组
    if(n < $0.length){
        n = $0.length;
         name = $1;
     }
});
console.log(n,name);

上面的例子中,括号,表示一个分组,\1+ 表示重复上面分组里的内容一次或多次

posted @   真的想不出来  阅读(7034)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示