什么是正则?正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本 。比如,正则表达式给出一个 Email 地址的模式,然后用它来确定一个字符串是否为 Email 地址 。JAVAScript 的正则表达式体系是参照 Perl 5 建立的 。
建立正则表达式
使用内置RegExp构造函数
var reg=new RegExp("martin");直接建立
var reg=/martin/;以上两种建立正则的方式是等效的,,不过一般第二种方式用的更多一些 。
接受参数
正则表达式除了接受一个字面量字符参数,还可以接受一个修饰符作为参数 。
var reg=/martin/g//var reg=new RegExp("martin","g");说完基本的正则概念和接受参数,接下来说一下正则的匹配规则,这一块也是面试和笔试考察的重点 。
匹配规则在说匹配规则之前我们先说一下正则中的字符分类 。
【正则表达式详解】字面量字符和元字符
字面量字符:只表示它字面的含义,就像上面代码中的martin,也就是实际用于匹配的字符 。
元字符:不代表字符本身字面的意思,而是有特殊含义的字符,也就是帮助字面量字符达到更好的匹配效果的辅助字符 。
其中元字符又分为很多类,具体类型如下:
![正则表达式详解](http://img.jiangsulong.com/220405/014T64V2-0.jpg)
文章插图
元字符分类
- 点字符(.)
- 位置字符(^和$)
- 选择符(|)
var reg=/1(1|2)2/;reg.test("112") //truereg.test("122") //true转义字符
如果要在正则表达式中使用具有特殊含义的字符,如:$,^等,也就是如果要匹配它们本身,那就需要用到转义字符了,也就是在他们前面加上""反斜杠,比如要匹配$,则写成$ 。
正则表达式中,需要反斜杠转义的,一共有12个字符:^、.、[、$、(、)、|、*、+、?、{和\ 。需要特别注意的是,如果使用RegExp方法生成正则对象,转义需要使用两个斜杠,因为字符串内部会先转义一次 。
.
var reg=/1$/; //表示匹配字符串"1$",而不是以1结尾的字符串reg.test("1") //falsereg.test("1$") //true特殊字符
正则表达式对一些不能打印的特殊字符,提供了表达方法 。
- cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符 。
- [b] 匹配退格键(U+0008),不要与b混淆 。
- n 匹配换行键 。
- r 匹配回车键 。
- t 匹配制表符 tab(U+0009) 。
- v 匹配垂直制表符(U+000B) 。
- f 匹配换页符(U+000C) 。
- 匹配null字符(U+0000) 。
- \xhh 匹配一个以两位十六进制数(\x00-\xFF)表示的字符 。
- \uhhhh 匹配一个以四位十六进制数(\u0000-\uFFFF)表示的 Unicode 字符 。
字符类表示有一系列字符可供选择,只要匹配其中一个就可以 。表示方法为将所有可供选择的字符都放在方括号内,比如[xyz]表示匹配x、y、z中的任意一个就可以 。
var reg=/[abc]/; //表示匹配a,b,c中任一字符皆可reg.test("hello") //falsereg.test("Apple") //true说到这里同学们应该会想到之前说过的选择符吧,[xyz]就等效于(x|y|z),两者可相互转换 。
Q:那既然两种字符功能可以相互转换,为啥有了选择符还要字符类呢?
推荐阅读
- TCP粘拆包详解与Netty代码示例
- 「一图详解」收藏!一份关于小规模纳税人减征增值税的学习笔记
- 详解MySQL兼容性show_compatibility_56参数
- 详解Https是如何确保安全的
- 详解ORACLE数据字典--V$SQL_WORKAREA_ACTIVE
- 详解汽车散热系统,夏天拒绝发动机高温
- 详解唐诗中的那些茶文化
- 地下室防水施工步骤详解
- 图文详解HDFS工作机制
- MIUI12桌面设置详解,新手必会的八项小技巧