正则表达式

正则是一个让人感觉十分脑疼但是却又十分有用的东西,其实了解了正则之后,你就会觉得正则其实是一个很简单的东西。接下来我们就来了解一下正则。

注:接下来的一切代码都是JAVASCRIPT代码,如果想练手,直接打开console即可

正则是干什么用的,在这里我想大家都应该知道知道,假如不知道请自行百度,这里就不做讲解。 
1.正则的基本形式: 
正则表达式的表达形式如下:

/具体的正则表达式/  /**这就是一个正则表达式,使用正则的时候,需要将正则表达式包裹在一对"//"之间**/
  •  

正则表达式是由普通字符与特殊字符(元字符)组成的文字模式。 
普通字符就是如同“a,b”等常用的单个字符,而元字符则是带有特殊含义的特定字符,这些元字符扩大了正则表达的意思,是之可以匹配很多东西。

/a/
  •  

如上就是一个正则表达式,它只包含一个a字符,所以它只能匹配单个a 
例如 caat

'caat'.match(/a/)//返回结果是 :['a']
  •  

假如我们想匹配caat中两个a怎么办?

'caat'.match(/aa/)//返回结果是 :['aa']
  •  

这样也可以,但是加入 c 与 t 之间的a是不确定的,我们想匹配不确定数量的a呢?

'caaaaaaat'.match(/a+/);
  •  

这样就行了,这时我们使用了元字符“+”。 
没有元字符的正则只能适应简单的场景,而元字符给了正则更为广阔的天空。 
下面我来介绍一下元字符。 
(我自己将元字符分为如下几种:位置元字符,数量元字符,特殊含义元字符,集合元字符,逻辑元字符,匹配项元字符。上面的分类都是自己想出来的。) 
注:没有数量元字符修饰的,都是匹配单个字符。另外没有全局模式,他们都是一遇到符合的就会返回,不会继续匹配剩下的

补充:模式

g:全局模式 即正则将应用于整个字符串,并非在发现第一个匹配时就立即返回

i:不区分大小写

m:多行模式
  •  

1.位置元字符

^ :表示从一开始的位置进行匹配,可理解为是否按照^后面字符的开头(需要匹配的表达式跟在^后面)

'cat'.match(/a/);//它会匹配cat中间的a
'cat'.match(/^a/);//返回null,因为它的含义是匹配以a为起始位置的项,cat是以c开头,而不是a所以匹配不到
  •  

:匹配输入的结束,可以理解为是否以$前面的字符进行结尾(需要匹配的表达式跟在$前面)

'cat'.match(/t$/)//返回['t'],因为cat是以t字母结尾的
'cat'.match(/a$/)//返回null,因为cat是以t字母结尾的而不是‘a’
  •  

2.数量元字符

*:匹配前面一个表达式出现0次或者多次

'caaaaat'.match(/a*/)//返回[""]因为它表示a出现0次或者多次,0次当然就是""。
'caaaaat'.match(/ca*/)//返回["caaaaa"] /ca*/的意思是c字母与0次或多次a的结合体,在'caaaaat'中这样的结合体就是"caaaaa"  
//ca* --> 'c'+ n个a的结合 (n是非负整数)(因为它的贪婪模式,所以会尽可能多的去匹配a)
'ct'.match(/ca*/) //返回["c"] 因为没有a所以只能n==0
  •  

+:匹配前面一个表达式出现1次或者多次

?:匹配前面一个表达式0次或者1次。添加在“*”“+”后面则是表示,尽可匹配尽可能少的字符

注:“*”“+”是尽可能多的匹配,所以他们是贪婪的,而“?”则是尽可能少的,所以它是非贪的.

贪婪的意思就是尽可能把最多的字符返回给你

{n}:n是一个非负整数,表示匹配前面一个表达式正好出现n次

'caaaaat'.match(/ca{1}/g)//返回["ca"] 它的意思就是c字母与出现一次的a字母的结合
//  ca{1} --> ca  ca{2} --> caa  ca{3} --> caaa ca{n} --> c[n个a]
  •  

{n,m}:匹配前面一个表达式至少出现n次 之多出现m次

3.特殊含义元字符

.:(单个点)匹配除换行符外的单个字符

[\b]:匹配一个退格

\b:匹配一个词的边界(词与空格间的位置)

\B:匹配非词的边界

\cX:X只能表示A-Z或者a-z中的任意,表示匹配Control-X

\d:匹配一个数字

\D:匹配一个非数字

\f:匹配一个换页符

\n:匹配一个换行符

\r:匹配一个回车符

\s:匹配一个空白符(空格,制表,换页,换行等)

\S:匹配一个非空白符

\t:水平制表

\v:垂直制表

\w:匹配一个单字字符(字母,数字,下划线)

\W:非单字字符

\0:匹配NULL字符 (C语言中:’\0’ 是字符串的结束符,任何字符串之后都会自动加上’\0’)

4.集合元字符

(x):x为一个匹配表达式 匹配括号里面的正则表达式 并进行分组 也就是说它可以重复使用,无需重新书写。一般与 \n (n为正整数)一起使用

'catabacabacata'.match(/(ab)(ac)/);//返回["abac", "ab", "ac"]
'catabacabacata'.match(/(ab)(ac)\1\2/);//返回["abacabac", "ab", "ac"] 
// \1 表示的是 (ab)  \2 表示的是 (ac)
  •  

(?:x):不记住分组,无法重复使用

x(?=y):匹配x,但x后必须有y才会被匹配

x(?!y):匹配x,但x后必须没有y才会被匹配

[x]:(x为多个字符)匹配中括号内部字符的任意一个字符

[0-9]等价于\d [0-9A-Za-z_]等价于\w
  •  

[^x]:匹配非括号内部字符的任意一个字符

 [^0-9]等价于\D  [^0-9A-Za-z_]等价于\W

转载于:https://my.oschina.net/u/3378525/blog/864653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值