1. 复习基本元字符
. 表示除换行外的任意的单个字符
[] 字符组,任意的单个字符,中括号中的任意一个字符
() 含义 1. 改变优先级 2. 提取组(分组)
限定符
{n} 表示前面的表达式必须出现n次
{n,} 表示前面的表达式至少出现n次,最多不限
{n,m} 至少出现n次,最多出现m次
* 表示出现0次或多次
+ 表示出现1次或多次
? 表示0次或1次 另外一个意思是:终止贪婪模式
简写表达式
[0-9]
\d 表示[0-9] 数字
\D 非数字
\s 表示所有空白符
\S 表示\s的反面
\w 非特殊字符
\W 特殊字符
\b 表示单词的边界
2. JS中创建正则表达式方法
1. var regex = new RegExp("\\d{5}") 要考虑转义符
2. var regex = /\d{5}/ (recommand) 写在//的正则表达式不用管转义符
RegExp对象的方法
1. test(str)判断字符串str是否匹配正则表达式,返回true/false
2. exec(str)进行搜索匹配,返回值为匹配结果(*),相当于C#中match()和matches()
如果exec()找到了匹配的文本,则返回一个结果数组(完全匹配的字符串以及提取组的结果)
否则,返回null
要提取多个需要反复调用exec() 类似于matches()方法
注意:全局模式/..../g 忽略大小写/..../i 多行匹配/..../m
在非全局模式下,调用一次exec()相当于match();
在全局模式下连续多次调用相当于matches()
3. string的正则表达式
String对象中提供了一些与正则表达式相关的方法,相当于对于RegExp类的包装,简化调用
match(regexp), 非全局模式下相当于调用exec()
全局模式下相当于调用C#的matches(),返回数组中是所有的匹配结果(不包含提取组信息)
举例:
var s = "aaa@163.com";
var regex = /(.+)@(.+)/;
var match = s.match(regex);
alert(RegExp.$1+",服务器:"+RegExp.$2);
字符串.replace(/正则/g,"要替换的字符串$1");
4. HTML, JS的压缩和混淆
去掉空格、缩短变量名,让html, js尺寸更小,提高下载速度
HTML压缩器:HTML Compress
JavaScript压缩器:Google Closure Compiler, YUI Compressor, JsPacker
5. 键盘按键弹起(输入完成)事件 onkeyup
(输入的是字母可以 如果是汉字,按下键盘但字可能还没有输入,考虑使用onchange事件)
获取用户点击的keyCode window.event.keyCode
6. JS的一些习惯与性能问题
1) 声明变量要赋初值 var n = 10
2) 尽量避免直接声明全局变量, 比如要声明全局变量name,但是它有可能与window.name冲突
所以全局变量一般都会声明在一个全局对象中:
var itcast = {name:'zxh', num:10},使用这些全局变量的时候通过
itcast.name或者itcast.num,就可以减少与系统的重名了
3) 当编写大量JS代码的时候难免会遇到命名冲突的问题,这时可以通过模拟命名空间的方式
来避免命名冲突。如:
var itcast = {};
itcast.net = {};
4) 尽量避免使用全局变量(搜索全局变量时,会一层一层的搜索每个作用域范围,耗时,低效)
5) 使用减值循环或者优化循环条件,不要在循环条件中写i<xxx.length
而要用一个变量来代替如i<len。这时因为循环条件每次都会执行,这样的话每次都会计算xxx.length
6) 避免使用SetInterval("myFunc()",1000) 这种双重解析的代码 应使用匿名方法
7) 使用原生的方法,比如内置的join() reverse(),而不要用自己写的
因为原生方法都是用c或者c++写的,性能高
8) 使用switch来代替多个if-else
9) 尽量减少语句数量
10)使用文档碎片,避免多次更新页面
var fragment = document.createDocumentFragment();
. 表示除换行外的任意的单个字符
[] 字符组,任意的单个字符,中括号中的任意一个字符
() 含义 1. 改变优先级 2. 提取组(分组)
限定符
{n} 表示前面的表达式必须出现n次
{n,} 表示前面的表达式至少出现n次,最多不限
{n,m} 至少出现n次,最多出现m次
* 表示出现0次或多次
+ 表示出现1次或多次
? 表示0次或1次 另外一个意思是:终止贪婪模式
简写表达式
[0-9]
\d 表示[0-9] 数字
\D 非数字
\s 表示所有空白符
\S 表示\s的反面
\w 非特殊字符
\W 特殊字符
\b 表示单词的边界
2. JS中创建正则表达式方法
1. var regex = new RegExp("\\d{5}") 要考虑转义符
2. var regex = /\d{5}/ (recommand) 写在//的正则表达式不用管转义符
RegExp对象的方法
1. test(str)判断字符串str是否匹配正则表达式,返回true/false
2. exec(str)进行搜索匹配,返回值为匹配结果(*),相当于C#中match()和matches()
如果exec()找到了匹配的文本,则返回一个结果数组(完全匹配的字符串以及提取组的结果)
否则,返回null
要提取多个需要反复调用exec() 类似于matches()方法
注意:全局模式/..../g 忽略大小写/..../i 多行匹配/..../m
在非全局模式下,调用一次exec()相当于match();
在全局模式下连续多次调用相当于matches()
3. string的正则表达式
String对象中提供了一些与正则表达式相关的方法,相当于对于RegExp类的包装,简化调用
match(regexp), 非全局模式下相当于调用exec()
全局模式下相当于调用C#的matches(),返回数组中是所有的匹配结果(不包含提取组信息)
举例:
var s = "aaa@163.com";
var regex = /(.+)@(.+)/;
var match = s.match(regex);
alert(RegExp.$1+",服务器:"+RegExp.$2);
字符串.replace(/正则/g,"要替换的字符串$1");
4. HTML, JS的压缩和混淆
去掉空格、缩短变量名,让html, js尺寸更小,提高下载速度
HTML压缩器:HTML Compress
JavaScript压缩器:Google Closure Compiler, YUI Compressor, JsPacker
5. 键盘按键弹起(输入完成)事件 onkeyup
(输入的是字母可以 如果是汉字,按下键盘但字可能还没有输入,考虑使用onchange事件)
获取用户点击的keyCode window.event.keyCode
6. JS的一些习惯与性能问题
1) 声明变量要赋初值 var n = 10
2) 尽量避免直接声明全局变量, 比如要声明全局变量name,但是它有可能与window.name冲突
所以全局变量一般都会声明在一个全局对象中:
var itcast = {name:'zxh', num:10},使用这些全局变量的时候通过
itcast.name或者itcast.num,就可以减少与系统的重名了
3) 当编写大量JS代码的时候难免会遇到命名冲突的问题,这时可以通过模拟命名空间的方式
来避免命名冲突。如:
var itcast = {};
itcast.net = {};
4) 尽量避免使用全局变量(搜索全局变量时,会一层一层的搜索每个作用域范围,耗时,低效)
5) 使用减值循环或者优化循环条件,不要在循环条件中写i<xxx.length
而要用一个变量来代替如i<len。这时因为循环条件每次都会执行,这样的话每次都会计算xxx.length
6) 避免使用SetInterval("myFunc()",1000) 这种双重解析的代码 应使用匿名方法
7) 使用原生的方法,比如内置的join() reverse(),而不要用自己写的
因为原生方法都是用c或者c++写的,性能高
8) 使用switch来代替多个if-else
9) 尽量减少语句数量
10)使用文档碎片,避免多次更新页面
var fragment = document.createDocumentFragment();