JavaScript基础 正则表达式

2018-03-12  本文已影响0人  0说

正则表达式

是对象类型 英文:RegExp
作用是用来匹配字符

如何使用:

test方法的使用
reg.test( str );检测str里面有没有reg规则,有的话返回true,没有返回false

注意事项:
使用test的时候注意g的时候
例:

var str = 'get';
var reg = /get/gi;  注意如果加g全局匹配的话 第一匹配到 不会马上完 
                            get匹配到str的get  返回true 
                            但这时候不会马上停 而会再向下匹配,str里get下一个是空字符串  正则还会跟这个空字符串匹配  返回是false
console.log( reg.test( str ) )
console.log( reg.test( str ) )

例:

第一种创建写法
var  reg = /abc/; 制定出索引规则
var  str = 'abckdfirf';
alert( reg.test( str ) )
检测str里有没有abc这三个连着的字符

我们如果有一个变量要索引这个变量的值,上面是没办法传变量

第二种创建写法
var a = 'abc';
var reg = new RegExp( a ); //如果要索引一个变量一定是这样创建
var str = 'abckdfirf';
alert( reg.test( str ) )

转义符号

转义符号结合某些字母而表现出的特殊意义

1、
\d匹配一个数字( 0、1、2、3、4、5、6、7、8、9)
\D匹配一个非数字

var reg = /\d/;
var str = 'abckf3';
console.log( reg.test( str ) ) //检测出str里有没有数字

2、
\s 一个空格字符串 、tab符号 所有会产生空格的(/n /s ' ')都可以匹配出来
\S匹配非空格的字符

var reg = /\s/;
var str = 'abckf 3';
console.log( reg.test( str ) ) //检测出str里有没有空格

3、
\w 一个字母/数字/_字符 只匹配这三个类型
\W 匹配除了\w外其他都可以

var reg = /\w/;
var str = 'abckf3';
console.log( reg.test( str ) ) //检测出str里有没有字母/数字/_字符 

4、
\b 一个单词边界 /边词符号(匹配一个单词)
\B 除了\b外的

var reg = /aLi/;
var str = 'aLikkkk is a man';
reg.test( str )//这里就匹配aLi有这三个字符(不严谨)

现在要只匹配单单aLi有这个单词
var reg = /\baLi\b/;
var str = 'aLikkkk is a man'; 
reg.test( str ) //这里匹配不行 aLikkkk 包含在里面 不是一个单词
只有当aLi 一个单词出现时才会匹配

var str = 'aLi kkkk is a man';  //要有边界
(单词边界:起始位置、空格、所有除了\w之外的字符都可以( + - 汉字))
var str = 'aLi汉kkkk is a man'; 

转义符号

展现出某个具有特殊意义的字符
1、把一个具有特殊意义的字符变得没有特殊意义

var str = '\'';
alert( str )\\ 这里弹出'

var str = '\\'
alert( str ) 这里弹出 \

注意一个\转义符号控制一个转义字符
如果要输出\\\
var str = '\\\\\\';
alert( str )

var str = '\"\"\" '
alert( str ) \\ """

2、和一些单词结合有换行或着制表符的意思 \n(换行) \r(换行) \t(制表符)

var str = '阿\n里';
alert( str );
image.png
var reg = /\//,
    str = '/';
    alert( reg.test( str ))

数量词

使用方法:
字符串.match( 正则 )
将匹配成功的内容整合成数组返回,匹配不成功返回null

var reg = /cg/;
var str = 'abcggggg';
console.log(    str.match( reg )    )
image.png
var reg = /\d\d\d/, //有几个数字就要有几个\d
    str = 'abcgggg225gcg';
    console.log( str.match( reg ))
image.png

我们如果不知道有几个数字呢

+ :匹配大于等于1个 ,尽可能多的匹配

? :没有或着1个的匹配

* :至少0个

{n,m} :常规数量词,n和m是自然数 n>m 限定前面有几个

{n} :常规数量词,最少有n 多于n只取到最近的n个

{n,} :常规数量词,n个到无穷大

+案例

var reg = /\d+/, //有几个数字就要有几个\d
    str = 'abcgggg288854g5655cg';
    console.log( str.match( reg ))
匹配第一个连着的数字

?案例

var reg = /a?fei/, //一定要匹配到afei  有时候我们要匹配 有a 或着没有a
    str = 'fei';
    console.log( str.match( reg ))
image.png
var reg = /a?fei/, //一定要匹配到afei  有时候我们要匹配 有a 或着没有a
//?只针对于问号前面的那个单位起作用
    str = 'aaaaaafei';
    console.log( str.match( reg ))
只能匹配到一个a

?只针对于问号前面的那个单位起作用

* 案例

var reg = /a*fei/, 
    str = 'aaaaafei';
    console.log( str.match( reg ))
匹配到所有的a

{n,m}案例

var reg = /a{2,5}fei/, //限定匹配a有要2到5个 没有的话就null
    str = 'aaaaafei';
    console.log( str.match( reg ))

var reg = /a{2,5}fei/, 
    str = 'aaaaaaaaafei';
    console.log( str.match( reg ))
a超过5过只能匹配最近的5个

数量词的贪婪 和 惰性

贪婪:匹配最多的
惰性:匹配最少的

var str = 'AAAAABBBBCCC';
var reg = /a{0,10}/ig; 贪婪匹配 
console.log( str.match( reg ) ) 图A
原理是: a先取10个 去匹配 看str里有没有  如果没有 就变成 9  8 7 6 5 
                到5时可以匹配成功 就取 AAAAA  
                下来和B匹配  匹配量词可以取到0  B就会匹配成   ' '空字符 ....

var str = 'AAAAABBBBCCC';
var reg = /a{0,3}/ig; 贪婪匹配 
console.log( str.match( reg ) ) 图A
原理是: a先取10个 去匹配 看str里有没有  如果没有 就变成 9  8 7 6 3 
                到3时可以匹配成功 就取 AAA     
                str 看成被取走AAA(原str不会改变)  AABBBBCCC
                 下来对 AABBBBCCC  就可以取到AA 
                下来和B匹配  匹配量词可以取到0  B就会匹配成   ' '空字符 ....

var str = 'AAAAABBBBCCC';
        var reg = /a{1,3}?/gi; //惰性匹配
        console.log( str.match( reg ) ) //图C
原理:惰性匹配规则a取1个去匹配 
          str第一就是A 匹配成功 AAAABBBBCCC
          再继续匹配 A 匹配成功 AAABBBBCCC
          再继续匹配 A 匹配成功 AABBBBCCC
          再继续匹配 A 匹配成功 ABBBBCCC
          再继续匹配 A 匹配成功 BBBBCCC
          下来就B就不符合  匹配不成功  
          就停了
图A
图B
图C
var str = '1245874';
var reg = /\d{2,3}; //默认是贪婪匹配 
console.log( str.match( reg ) ); (图一)

var str = '1245874';
var reg = /\d{2,3}?/; //?变成惰性匹配 
console.log( str.match( reg ) ); (图二)

var str = 'aa21231212154121123';
var reg = /aa\d+123/; //默认是贪婪匹配
console.log( str.match( reg ) );(图三)

var str = 'aa21231212154121123';
var reg = /aa\d+?123/; //惰性匹配
console.log( str.match( reg ) );(图四)
图一 图二
图三 图四
<script>
       var str = 'aaaabbbbdddd';
       var reg = /a{1,5}/g;//贪婪匹配
       console.log( str.match( reg ) );
    </script>  (图五)

<script>
       var str = 'aaaabbbbdddd';
       var reg = /a{1,5}?/g; //惰性匹配
       console.log( str.match( reg ) );
    </script>  (图六)

<script>
       var str = 'aaaabbbbdddd';
       var reg = /a??/g; //第一个?是指 {0,1}
       console.log( str.match( reg ) );
    </script> 图七
图五
图六
图七

匹配的是0到1个 ?是惰性 这里会取0个去匹配 取' '字符去匹配

修饰符

i:不区分大小写
g: 全局匹配,匹配成功不会结束,只到最末尾才结束
m: 换行匹配(默认不换行)

g案例

 var str = '一狗:10,二狗:12,三狗:13';
 var reg = /\d+/; //只匹配一个就结束
 console.log( str.match( reg ) );
image.png

匹配全部

 var str = '一狗:10,二狗:12,三狗:13';
 var reg = /\d+/g;  //匹配全部 得到标准的数组
 console.log( str.match( reg ) );
标准的数组

i案例

var str = 'aabc';
var reg = /AB/; //匹配不到
console.log( str.match( reg ) );

var str = 'aabc';
var reg = /AB/i; //匹配到 得到的类数组
console.log( str.match( reg ) ); (图一)

var str = 'aabc';
var reg = /AB/ig; //匹配到 得到的数组
//修饰词可以多个  放在一起
console.log( str.match( reg ) );(图二)
图一
图二

字符集

匹配数字或字母的范围 (第一功能)
[0 - 9]区间可以拆分 (常用)可以看成 0|1|2|3........9
[a - z]区间可以拆分 (常用) 可以看成 a|b|c|d........z
[A - Z]区间可以拆分 (常用) 同上
[0 - z] 匹配数字跟字母 根据ANSI码来排的

[ a - Z ] 不能拆分 不能跨区间

var str = '0123456789';
var reg = /[2-8]/;//只能匹配到一个
console.log(  str.match(reg)  ) 
只匹配到一个
var str = '0123456789';
var reg = /[2-8]/g;//全局 匹配到所有
console.log(  str.match(reg)  ) 
image.png
var str = '0123456789';
var reg = /[2-8]{2}/g;//全局 匹配2个2个
console.log(  str.match(reg)  ) 
image.png
var str = 'abcdefghijklmnzofjf';
var reg = /[a-g]/g;
console.log(  str.match(reg)  )
image.png
var str = 'abcdefghijklmnzofjf';
var reg = /[a-g]{2}/g;
console.log(  str.match(reg)  )
image.png
var str = 'ab58jk85AAo-fjf';
var reg = /[a-z]/ig; //i不区分大小写 (代表所有大小写字母)
console.log(  str.match(reg)  )
image.png

或者 | 的功能

匹配 a 或着 g
var str = 'abcdefghijklmnzofjf';
var reg = /[ag]/g;
console.log(  str.match(reg)  )
image.png
var str = 'ab58jk85AAofjf';
var reg = /[0-9a-zA-Z]/g;//匹配数字跟所有字母
console.log(  str.match(reg)  )
image.png

注意如果要匹配-要转义

var str = 'ab58jk85AAo-fjf';
var reg = /[0-9a-zA-Z\-]/g;
console.log(  str.match(reg)  )
image.png

配合内部 ^ 除了的意思 只能写在第一位
放外面 reg = /a^/

var str = 'ab58jk85AAo-fjf';
var reg = /[^\d]/g; //除了数字外     汉字 + ,字母...都可以匹配得到
console.log(  str.match(reg)  )
image.png

字集

() 匹配 (一个整体)匹配里面这个整体

var str = 'ab58jkab85AAo-fjf';
var reg = /(ab)+(c)+/gi;
console.log(  str.match(reg)  )
image.png

整体或着 |
/acb|d/ 表达的意思 是abc或着d 匹配abc 或着d

var str = 'abcfd-fjf';
var reg = /abc|d/g;
console.log(  str.match(reg)  )
image.png

如果要匹配 abc 或着 abd

    var str = 'abdfdabc-fjf';
    var reg = /ab[cd]/;
    var x = str.match(reg);
    console.log(  x )
image.png
var str = 'abdfdabc-fjf';
var reg = /ab(cc|d)/g; //abcc 或 abd
var x = str.match(reg);
console.log(  x )
image.png
上一篇 下一篇

猜你喜欢

热点阅读