发表于: 2017-04-18 20:01:12
1 1191
任务五
今天完成的事情
- 1完成任务五的页面编写。
- 2完成任务五的功能。
- 3学习正则表达式,完成密码用户名验证。
- 4.整理正则表达式。
明天计划的事情
- 1.开始学习angular。
遇到的问题
1 对于表单验证,需要用到正则表达式,但是网上查阅资料后,发现教程并不是很清晰。后来查看了阮一峰写的,比较清晰和有条理,但是学起来还是有点吃力,东西太多太杂,只能写一些简单的正则表达式。
收获
1.学会了正则表达式的基本使用。
2.理解了环境变量。
RegExp对象
概述
正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用作按照“给定模式”匹配文本的工具。比如,正则表达式给出一个Email地址的模式,然后用它来确定一个字符串是否为Email地址。JavaScript的正则表达式体系是参照Perl 5建立的。
新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。这两种写法——字面量和构造函数——在运行时有一个细微的区别。采用字面量的写法,正则对象在代码载入时(即编译时)生成;采用构造函数的方法,正则对象在代码运行时生成。考虑到书写的便利和直观,实际应用中,基本上都采用字面量的写法。
正则对象生成以后,有两种使用方式:
- 正则对象的方法:将字符串作为参数,比如regex.test(string)。
- 字符串对象的方法:将正则对象作为参数,比如string.match(regex)。
正则对象的属性和方法
属性
正则对象的属性分成两类。
一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。另一类是与修饰符无关的属性,主要是下面两个。
- lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义。
- source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
test( )
正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。/cat/.test('cats and dogs') // true
上面代码验证参数字符串之中是否包含cat,结果返回true。
如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
exec( )
正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,成员是每一个匹配成功的子字符串,否则返回null。
字符串对象的方法
字符串对象的方法之中,有4种与正则对象有关。
- match():返回一个数组,成员是所有匹配的子字符串。
- search():按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。
- replace():按照给定的正则表达式进行替换,返回替换后的字符串。
- split():按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。
String.prototype.match()
从上面代码可以看到,字符串的match方法与正则对象的exec方法非常类似:匹配成功返回一个数组,匹配失败返回null。
如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。
String.prototype.search()
字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。
String.prototype.replace()
字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是搜索模式,第二个是替换的内容。
匹配规则
字面量字符和元字符
大部分字符在正则表达式中,就是字面的含义,比如/a/匹配a,/b/匹配b。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的a和b),那么它们就叫做“字面量字符”(literal characters)。
除了字面量字符以外,还有一部分字符有特殊含义,不代表字面的意思。它们叫做“元字符”(metacharacters),主要有以下几个。
点字符
点字符(.)匹配除回车(\r)、换行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
位置字符
位置字符用来提示字符所处的位置,主要有两个字符。
- ^ 表示字符串的开始位置。
- $ 表示字符串的结束位置。
选择符(|)
竖线符号(|)在正则表达式中表示“或关系”(OR),即cat|dog表示匹配cat或dog。
转义符
正则表达式中那些有特殊含义的字符,如果要匹配它们本身,就需要在它们前面要加上反斜杠。比如要匹配加号,就要写成+。
字符类
字符类(class)表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内,比如[xyz] 表示x、y、z之中任选一个匹配。
/[abc]/.test('hello world') // false
/[abc]/.test('apple') // true
上面代码表示,字符串“hello world”不包含a、b、c这三个字母中的任一个,而字符串“apple”包含字母a。
有两个字符在字符类中有特殊含义。
(1)脱字符(^)
如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配。比如,[^xyz]表示除了x、y、z之外都可以匹配。
(2)连字符(-)
某些情况下,对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围。比如,[abc]可以写成[a-c],[0123456789]可以写成[0-9],同理[A-Z]表示26个大写字母。
注意,字符类的连字符必须在头尾两个字符中间,才有特殊含义,否则就是字面含义。比如,[-9]就表示匹配连字符和9,而不是匹配0到9。
预定义模式
预定义模式指的是某些常见模式的简写方式。
- \d 匹配0-9之间的任一数字,相当于[0-9]。
- \D 匹配所有0-9以外的字符,相当于[^0-9]。
- \w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。
- \W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。
- \s 匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f]。
重复类
模式的精确匹配次数,使用大括号({})表示。{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。
/lo{2}k/.test('look') // true
/lo{2, 5}k/.test('looook') // true
上面代码中,第一个模式指定o连续出现2次,第二个模式指定o连续出现2次到5次之间。
贪婪模式
上一小节的三个量词符,默认情况下都是最大可能匹配,即匹配直到下一个字符不满足匹配规则为止。这被称为贪婪模式。
var s = 'aaa';
s.match(/a+/) // ["aaa"]
上面代码中,模式是/a+/,表示匹配1个a或多个a,那么到底会匹配几个a呢?因为默认是贪婪模式,会一直匹配到字符a不出现为止,所以匹配结果是3个a。
如果想将贪婪模式改为非贪婪模式,可以在量词符后面加一个问号。
var s = 'aaa';
s.match(/a+?/) // ["a"]
上面代码中,模式结尾添加了一个问号/a+?/,这时就改为非贪婪模式,一旦条件满足,就不再往下匹配。
除了非贪婪模式的加号,还有非贪婪模式的星号(*)。
修饰符
修饰符(modifier)表示模式的附加规则,放在正则模式的最尾部。
修饰符可以单个使用,也可以多个一起使用。
g修饰符
默认情况下,第一次匹配成功后,正则对象就停止向下匹配了。g修饰符表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换。
评论