// 使用 new 运算符的 test 方法示例
var pattern = new RegExp('box', 'i'); // 创建正则模式,不区分大小写
var str = 'This is a Box!'; // 创建要比对的字符串
alert(pattern.test(str)); // 通过 test()方法验证是否匹配// 使用字面量方式的 test 方法示例
var pattern = /box/i; // 创建正则模式,不区分大小写
var str = 'This is a Box!';
alert(pattern.test(str));// 使用一条语句实现正则匹配
alert(/box/i.test('This is a Box!')); // 模式和字符串替换掉了两个变量// 使用 exec 返回匹配数组
var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.exec(str)); // 匹配了返回数组,否则返回 null
// 使用 match 方法获取获取匹配数组
var pattern = /box/ig; // 全局搜索
var str = 'This is a Box!,That is a Box too';
alert(str.match(pattern)); // 匹配到两个 Box,Box
alert(str.match(pattern).length); // 获取数组的长度// 使用 search 来查找匹配数据
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.search(pattern)); // 查找到返回位置,否则返回-1
因为 search 方法查找到即返回,也就是说无需 g 全局。
// 使用 replace 替换匹配到的数据
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.replace(pattern, 'Tom')); // 将 Box 替换成了 Tom// 使用 split 拆分成字符串数组
var pattern = / /ig;
var str = 'This is a Box!,That is a Box too';
alert(str.split(pattern)); // 将空格拆开分组成数组
RegExp 对象的静态属性
属性
短名
含义
input
$_
当前被匹配的字符串
lastMatch
$&
最后一个匹配字符串
lastParen
$+
最后一对圆括号内的匹配子串
leftContext
$`
最后一次匹配前的子串
multiline
$*
用于指定是否所有的表达式都用于多行的布尔值
rightContext
$’
在上次匹配之后的子串
// 使用静态属性
var pattern = /(g)oogle/;
var str = 'This is google!';
pattern.test(str); // 执行一下
alert(RegExp.input); // This is google!
alert(RegExp.leftContext); // This is
alert(RegExp.rightContext); // !
alert(RegExp.lastMatch); // google
alert(RegExp.lastParen); // g
alert(RegExp.multiline); // false
// 使用点元字符
var pattern = /g..gle/; // .匹配一个任意字符
var str = 'google';
alert(pattern.test(str));// 重复匹配
var pattern = /g.*gle/; // .匹配 0 个一个或多个
var str = 'google'; //*,?,+,{n,m}
alert(pattern.test(str));// 使用字符类匹配
var pattern = /g[a-zA-Z_]*gle/; // [a-z]*表示任意个 a-z 中的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /g[^0-9]*gle/; // [^0-9]*表示任意个非 0-9 的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /[a-z][A-Z]+/; // [A-Z]+表示 A-Z 一次或多次
var str = 'gOOGLE';
alert(pattern.test(str));// 使用元符号匹配
var pattern = /g\w*gle/; // \w*匹配任意多个所有字母数字_
var str = 'google';
alert(pattern.test(str));
var pattern = /google\d*/; // \d*匹配任意多个数字
var str = 'google444';
alert(pattern.test(str));
var pattern = /\D{7,}/; // \D{7,}匹配至少 7 个非数字
var str = 'google8';
alert(pattern.test(str));// 使用锚元字符匹配
var pattern = /^google$/; // ^从开头匹配,$从结尾开始匹配
var str = 'google';
alert(pattern.test(str));
var pattern = /goo\sgle/; // \s 可以匹配到空格
var str = 'goo gle';
alert(pattern.test(str));
var pattern = /google\b/; // \b 可以匹配是否到了边界
var str = 'google';
alert(pattern.test(str));// 使用或模式匹配
var pattern = /google|baidu|bing/; // 匹配三种其中一种字符串
var str = 'google';
alert(pattern.test(str));// 使用分组模式匹配
var pattern = /(google){4,8}/; // 匹配分组里的字符串 4-8 次
var str = 'googlegoogle';
alert(pattern.test(str));
var pattern = /8(.*)8/; // 获取 8..8 之间的任意字符
var str = 'This is 8google8';
str.match(pattern);
alert(RegExp.$1); // 得到第一个分组里的字符串内容
var pattern = /8(.*)8/;
var str = 'This is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>'); // 得到替换的字符串输出
document.write(result);
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
var result = str.replace(pattern, '$2 $1'); // 将两个分组的值替换输出
document.write(result);
贪婪
惰性
+
+?
?
??
*
*?
{n}
{n}?
{n,}
{n,}?
{n,m}
{n,m}?
// 关于贪婪和惰性
var pattern = /[a-z]+?/; // ?号关闭了贪婪匹配,只替换了第一个
var str = 'abcdefjhijklmnopqrstuvwxyz';
var result = str.replace(pattern, 'xxx');
alert(result);
var pattern = /8(.+?)8/g; // 禁止了贪婪,开启的全局
var str = 'This is 8google8, That is 8google8, There is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>');
document.write(result);
var pattern = /8([^8]*)8/g; // 另一种禁止贪婪
var str = 'This is 8google8, That is 8google8, There is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>');
document.write(result);// 使用 exec 返回数组
var pattern = /^[a-z]+\s[0-9]{4}$/i;
var str = 'google 2012';
alert(pattern.exec(str)); // 返回整个字符串
var pattern = /^[a-z]+/i; // 只匹配字母
var str = 'google 2012';
alert(pattern.exec(str)); // 返回 google
var pattern = /^([a-z]+)\s([0-9]{4})$/i; // 使用分组
var str = 'google 2012';
alert(pattern.exec(str)[0]); // google 2012
alert(pattern.exec(str)[1]); // google
alert(pattern.exec(str)[2]); // 2012// 捕获性分组和非捕获性分组
var pattern = /(\d+)([a-z])/; // 捕获性分组
var str = '123abc';
alert(pattern.exec(str));
var pattern = /(\d+)(?:[a-z])/; // 非捕获性分组
var str = '123abc';
alert(pattern.exec(str));// 使用分组嵌套
var pattern = /(A?(B?(C?)))/; // 从外往内获取
var str = 'ABC';
alert(pattern.exec(str));// 使用前瞻捕获
var pattern = /(goo(?=gle))/; // goo 后面必须跟着 gle 才能捕获
var str = 'google';
alert(pattern.exec(str));// 使用特殊字符匹配
var pattern = /\.\[\/b\]/; // 特殊字符,用\符号转义即可
var str = '.[/b]';
alert(pattern.test(str));// 使用换行模式
var pattern = /^\d+/mg; // 启用了换行模式
var str = '1.baidu\n2.google\n3.bing';
var result = str.replace(pattern, '#');
alert(result);
常用的正则
检查邮政编码
var pattern = /[1-9][0-9]{5}/; // 共 6 位数字,第一位不能为 0
var str = '224000';
alert(pattern.test(str));
检查文件压缩包
var pattern = /[\w]+\.zip|rar|gz/; // \w 表示所有数字和字母加下划线
var str = '123.zip'; // \.表示匹配.,后面是一个选择
alert(pattern.test(str));
删除多余空格
var pattern = /\s/g; // g 必须全局,才能全部匹配
var str = '111 222 333';
var result = str.replace(pattern,''); // 把空格匹配成无空格
alert(result);
删除首尾空格
var pattern = /^\s+/; // 强制首
var str = ' goo gle ';
var result = str.replace(pattern, '');
pattern = /\s+$/; // 强制尾
result = result.replace(pattern, '');
alert('|' + result + '|');
var pattern = /^\s*(.+?)\s*$/; // 使用了非贪婪捕获
var str = ' google ';
alert('|' + pattern.exec(str)[1] + '|');
var pattern = /^\s*(.+?)\s*$/;
var str = ' google ';
alert('|' + str.replace(pattern, '$1') + '|'); // 使用了分组获取
简单的电子邮件验证
var pattern = /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;
var str = 'yc60.com@gmail.com';
alert(pattern.test(str));
var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;
var str = 'yc60.com@gmail.com';
alert(pattern.test(str));
3、Function类型
在 ECMAScript 中,Function(函数)类型实际上是对象。每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。
函数的声明方式
普通的函数声明
function box(num1, num2) {return num1+ num2;
}
使用变量初始化函数
var box= function(num1, num2) {return num1 + num2;
};
使用 Function 构造函数
var box= new Function('num1', 'num2' ,'return num1 + num2');
function box(sumFunction, num) {return sumFunction(num); // someFunction
}
function sum(num) {return num + 10;
}
var result = box(sum, 10); // 传递函数到另一个函数里