标准定义:是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的
望文生意:规定了一个字符串从开始到结束是由什么开始并且什么结束,中间的单词是由什么组成的,好比一个人是由头发或者没有头发开始的,但是必须有头,然后是脖子,然后是身子最后是脚。制定好规则后就可以将想要比较的对象往这个规则里面传递,如果合格就会返回true,否则返回false!所以写正则的时候先找找规律看看这个字段串是由几部分组成的!然后把这几部分拆成可用正则表达式表达的语言!
正则语言:
1) 直接给出字符就是精确匹配,普通字符不需要加\但是特殊字符需要加\
2) \d可以匹配一个数字
3) \w可以匹配一个字母或者一个数字
4) \s匹配一个空格
5) .可以匹配任意字符
6) *表示任意个字符,包含0个
7) +表示至少一个字符
8) ?表示0个或者1个字符
9) {n}表示有n个字符连续的出现在一起
10) {n,m}表示连续出现n个到m个字符
11) [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
12) [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','js2015'等等;
13) [a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;
14) [a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
15) A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript'、'Javascript'、'javaScript'或者'javascript'。
16) ^表示行的开头,^\d表示必须以数字开头。
17) $表示行的结束,\d$表示必须以数字结束。
js也可以匹配'jsp',但是加上^js$就变成了整行匹配,就只能匹配'js'了。
比如
'00\d'可以匹配'007',但无法匹配'00A';
'\d\d\d'可以匹配'010';
'\w\w'可以匹配'js';
使用表达式正则
1)字符产字面量的方式
2)正则表达式对象构造函数方式
使用第二种写法,因为字符串的转义问题,字符串的两个\\实际上是一个\
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false
正则表达式的妙用,切分字符串
'a b c'.split(' '); // ['a', 'b', '', '', 'c']
嗯,无法识别连续的空格,用正则表达式试试:
'a b c'.split(/\s+/); // ['a', 'b', 'c']
无论多少个空格都可以正常分割。加入,试试:
'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
再加入;试试:
'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']