正则表达式是表达文本模板的语言,功能及其强大,它的强大之处在于用很少很简短的代码就可以完成和代码量不符的工作。
我们平常对于正则表达式用的比较多的就是用正则表达式进行验证。
比如我们验证输入的手机号是否合法,验证邮箱格式是否正确等等。
=====================新建正则表达式
正则表达式的新建方法有两种,一种是使用new RegExp();进行创建,一种是使用斜杠最为开始和结尾的字面量方式创建。两种方法创建的正则表达式是等价的。
1、var reg=/aaa/; //这种方法是在编译时新建正则表达式
2、var reg=new RegExp('aaa');//这种方法是在运行的时候新建正则表达式
当然,考虑到书写的方便和直观,我们平常基本上用的都是第一种方法。
=====================生成之后使用
正则表达式生成之后有两种使用方法。
1、正则表达式的方法:把字符串作为参数:reg.test(String); eg:reg.test("rory898863935@gmail.com");
2、字符串的方法:把正则表达式作为参数:String.match(reg); eg:String.match(1[358]\d{9});
很好理解,正则的时候用test,里面放的是我们输入的东西,字符串的时候是match,里面放的是规则。
=====================两类属性
1、和修饰符有关的 :三者返回的都是boolean类型的值,而且三者都是只读的
ignore: /i 识别时忽略大小写
global :/g 如果正则表达式带有/g这样的修饰符,那么每次搜索都是从上一次结束的位置开始搜索。
比如说var a=/a/g; var b='ccac';那么a.lastindex就等于0,经过a.test(b);之后a.lastindex就=3,表示下 一次从3开始匹配。
我们也可以先指定a.lastindex=2,那么直接第一次就是从2开始匹配。
multiline:/m 默认情况下(即不加m
修饰符时),^
和$
匹配字符串的开始处和结尾处,加上m
修饰符以后,^
和$
还会匹配行首和行尾,即^
和$
会识别换行符(\n
)。
2、和修饰符无关的 :lastindex是这几个属性中唯一一个可以改变的。
lastindex: 返回的是一个数值,这个数值可以修改,表示下次开始搜索的位置。当然,在没有设置/g修饰符的情况 下这个属性是完全没有作用的。
resource: 返回的是这个正则表达式除过斜杠的内容
=====================匹配规则
1、字面量字符:大部分的字符在正则表达式里面都是你所看到的那个意思,没有别的意义,所以就是字面量字符 了,比如/abc/,它表示的就是abc三个字母连起来,没有别的意思。
2、元字符:这些字符都有特殊的含义。
点字符: (.)点,匹配除了换行(\n),回车(\r),行分隔符(\u2028),段分隔符(\u2029)之外的所有字符
但是记住:一个点只能匹配一个字符。eg:/a.b/可以匹配/akb/但是不能匹配/akkb/。
位置字符: ^和$这两种。
^表示开始的位置
$表示结束的位置 eg: /^[a-z]$/.test(String);
选择字符: |,一个竖杠,其实就是我们代码中的或,但是需要注意,|识别的是它前后的所有字符。
eg: /ab|cd/匹配的是ab或者cd,如果想匹配abd或者acd,就要带括号/a(b|c)d/;
3、转义字符:(\)就像我们上面说的,有一些字符是有特殊意义的,但是当我们想要匹配这个字符本身的字面意思 的话,我们就需要转义字符来转义,其实说白了就是用一个反斜杠来把它特殊的意义剥掉。
使用转义字符的话,如果说是通过new RegExp();这种的创建的话,那么就要用两个\\。
有12个字符需要转义: ^ $ * + ? . ( ) { [ | \\
4、特殊字符: \n换行 \r回车 \t制表符 \v垂直制表符 \f换页符 这些根本不用记
5、字符类: 字符类表示一系列可以供你选择,其实就是[ ]这种形式的。连字符和脱字符都指在[ ]中
6、脱字符: 在[ ]中如果第一个字符是^,就表示除了括号里面的字符,其他的都可以匹配。eg:[^a]那么这个除了 a,其他的所有都可以匹配,包括了换行符换页符等等,[^]如果括号里面只有这个表示匹配一切字 符。
需要注意的是:脱字符必须放在字符类的第一个才有意义,否则就是普通的^。
7、连字符: 这个好理解,就是我们说的多少到多少,它就起到这个作用。当然它必须放到[ ]中,否则是没有意 义的。
eg:[0123456789]等价于[0-9];它必须放在前后两个中间,比如[-9]只表示-和9这两个而不是0-9;
8、\d表示0-9,\D大写字母和小写字符表示的意识是相反的,表示除了0-9的所有字符。
\w表示字母数字下划线 \W相反集合
\s表示空格符(换行符换页符制表符等等) \S相反 除了空格符之外的所有字符 eg:[\s\S]就可以表示所有字符。
9、重复类和量词类:
重复类: /ak{3}/, 表示k再重复三次,{}里面也可以是范围:{3,6} 表示重复3-6次。{3,}表示重复大于3次。
量词类: 三个:* ? + *(表示0或n次) ?(表示0或1次) +(表示1或n次)
在量词后面加?,表示启用非贪婪模式:匹配成功后不再继续向下匹配