1.什么是正则表达式?
正则表达式是构成搜索模式(search pattern)的字符序列。
1.1语法
/pattern/modifiers;
1.2实例
var patt = /w3school/i;
1.3例子解释:
/w3school/i 是一个正则表达式。
w3school 是模式(pattern)(在搜索中使用)。
i 是修饰符(把搜索修改为大小写不敏感)。
1.4修饰符
| 修饰符 | 描述 | 
|---|---|
| i | 执行对大小写不敏感的匹配。 | 
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 | 
| m | 执行多行匹配。 | 
1.5方括号
方括号用于查找某个范围内的字符:
| 表达式 | 描述 | 
|---|---|
| [abc] | 查找方括号之间的任何字符。 | 
| [^abc] | 查找任何不在方括号之间的字符。 | 
| [0-9] | 查找任何从 0 至 9 的数字。 | 
| [a-z] | 查找任何从小写 a 到小写 z 的字符。 | 
| [A-Z] | 查找任何从大写 A 到大写 Z 的字符。 | 
| [A-z] | 查找任何从大写 A 到小写 z 的字符。 | 
| [adgk] | 查找给定集合内的任何字符。 | 
| [^adgk] | 查找给定集合外的任何字符。 | 
| (red|blue|green) | 查找任何指定的选项。 | 
1.6元字符
元字符(Metacharacter)是拥有特殊含义的字符:
| 元字符 | 描述 | 
|---|---|
| . | 查找单个字符,除了换行和行结束符。 | 
| \w | 查找单词字符。 | 
| \W | 查找非单词字符。 | 
| \d | 查找数字。 | 
| \D | 查找非数字字符。 | 
| \s | 查找空白字符。 | 
| \S | 查找非空白字符。 | 
| \b | 匹配单词边界。 | 
| \B | 匹配非单词边界。 | 
| \0 | 查找 NUL 字符。 | 
| \n | 查找换行符。 | 
| \f | 查找换页符。 | 
| \r | 查找回车符。 | 
| \t | 查找制表符。 | 
| \v | 查找垂直制表符。 | 
| \xxx | 查找以八进制数 xxx 规定的字符。 | 
| \xdd | 查找以十六进制数 dd 规定的字符。 | 
| \uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 | 
1.7量词
| 量词 | 描述 | 
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串。 | 
| n* | 匹配任何包含零个或多个 n 的字符串。 | 
| n? | 匹配任何包含零个或一个 n 的字符串。 | 
| n{X} | 匹配包含 X 个 n 的序列的字符串。 | 
| n{X,Y} | 匹配包含 X 至 Y 个 n 的序列的字符串。 | 
| n{X,} | 匹配包含至少 X 个 n 的序列的字符串。 | 
| n$ | 匹配任何结尾为 n 的字符串。 | 
| ^n | 匹配任何开头为 n 的字符串。 | 
| ?=n | 匹配任何其后紧接指定字符串 n 的字符串。 | 
| ?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 | 
1.8RegExp 对象属性
| 属性 | 描述 | FF | IE | 
|---|---|---|---|
| global | RegExp 对象是否具有标志 g。 | 1 | 4 | 
| ignoreCase | RegExp 对象是否具有标志 i。 | 1 | 4 | 
| lastIndex | 一个整数,标示开始下一次匹配的字符位置。 | 1 | 4 | 
| multiline | RegExp 对象是否具有标志 m。 | 1 | 4 | 
| source | 正则表达式的源文本。 | 1 | 4 | 
1.9RegExp 对象方法
| 方法 | 描述 | FF | IE | 
|---|---|---|---|
| compile | 编译正则表达式。 | 1 | 4 | 
| exec | 检索字符串中指定的值。返回找到的值,并确定其位置。 | 1 | 4 | 
| test | 检索字符串中指定的值。返回 true 或 false。 | 1 | 4 | 
1.10支持正则表达式的 String 对象的方法
| 方法 | 描述 | FF | IE | 
|---|---|---|---|
| search | 检索与正则表达式相匹配的值。 | 1 | 4 | 
| match | 找到一个或多个正则表达式的匹配。 | 1 | 4 | 
| replace | 替换与正则表达式匹配的子串。 | 1 | 4 | 
| split | 把字符串分割为字符串数组。 | 
2. 正则的使用
2.1 正则的匹配方法
2.1.1使用正则匹配子串str中的数字
\d{1,} [0-9]{1,} \d+ [0-9]+ 都表示至少一位的数字
//正则的使用var str = "wert45678yuiytrew";//使用正则匹配子串str中的数字console.log(str.match(/[0-9]+/));//使用RegExp创建一个正则对象var pat = new RegExp("[0-9]+");console.log(str.match(pat));console.log(pat.exec(str));//以上三个返回结果一致:["45678", index: 4, input: "wert45678yuiytrew", groups: undefined]//console.log(str.match(/[0-9]/g)); //匹配任意一位数字//console.log(str.match(/[0-9][0-9]/g)); //匹配任意两位数字//console.log(str.match(/[0-9]{2}/g)); //匹配任意两位数字//console.log(str.match(/[0-9][0-9][0-9]/g)); //匹配任意三位数字//console.log(str.match(/[0-9]{3}/g)); //匹配任意三位数字//console.log(str.match(/[0-9]{2,3}/g)); //匹配任意两位或三位数字//console.log(str.match(/\d{2,3}/g)); //匹配任意两位或三位数字console.log(str.match(/\d+/g)); //匹配至少一位数字console.log(str.match(/\d{1,}/g)); //匹配至少一位数字console.log(str.match(/[0-9]{1,}/g)); //匹配至少一位数字//\d{1,} [0-9]{1,} \d+ [0-9]+ 都表示至少一位的数字
2.1.2正则搜索
//正则搜索console.log(str.search(/[0-9]+/)); //4 返回首次匹配位置 ,没有返回-1console.log(str.search(pat)); //4 返回首次匹配位置 ,没有返回-1console.log(pat.test(str)); //true 返回是否匹配
2.1.3匹配多个
//匹配多个console.log("==============================");var str = "wert45678yui456ytr678ew";console.log(str.match(/[0-9]+/)); //默认只匹配一次console.log(str.match(/[0-9]+/g)); //(3) ["45678", "456", "678"] 使用g修饰符 匹配所有
2.1.4精确匹配
//精确匹配var pat = new RegExp("[0-9]+");console.log(pat.test("er2567thj")); //true 匹配子串中是否含有数字var pat = new RegExp("^[0-9]+");console.log(pat.test("er2567thj")); //false 匹配子串中是否是以数字开头console.log(pat.test("2567thj")); //true 匹配子串中是否是以数字开头var pat = new RegExp("[0-9]+$");console.log(pat.test("er2567thj")); //false 匹配子串中是否是以数字结尾console.log(pat.test("wer2567")); //true 匹配子串中是否是以数字结尾var pat = new RegExp("^[0-9]+$");console.log(pat.test("2567thj")); //false 匹配子串中是否是纯数字console.log(pat.test("wer2567")); //false 匹配子串中是否是纯数字console.log(pat.test("2567")); //true 匹配子串中是否是纯数字var pat2 = new RegExp("^[0-9]{6}$"); //精确匹配任意6位数字
2.2正则表达式分割
var str = "23:45:67:89:87:63";console.log(str.split(":")); //(6) ["23", "45", "67", "89", "87", "63"] 使用子串拆分str = "23:45;67:89!87#63";console.log(str.split(/[^0-9]/)); //(6) ["23", "45", "67", "89", "87", "63"] 使用正则拆分
2.3正则表达式替换
2.3.1将串中的分隔符统一替换成逗号
str = "23:45;67:89!87#63";//将上面子串中的分隔符统一替换成逗号,console.log(str.replace(/[^0-9]/g,",")); //23,45,67,89,87,63
2.3.2将字符串中的标签替换成</i
str = "<b>aaa</b><b>bb>b</b><b>ccc</b>";//将上面子串中的<b></b>标签替换成<i></i> 下面其中$1表示重复正则中第一个小括号中内容console.log(str.replace(/<b>(.*?)<\/b>/g,"<i>$1</i>"));//.*是贪婪匹配(最大) .*?是拒绝贪婪匹配(最小)
2.3.3西方日期格式替换成中国的[年-月-日]格式
 str = "04/28/2020"; //西方日期格式,请使用正则替换成中国的[年-月-日]格式
    console.log(str.replace(/(\d{2})\/(\d{2})\/(\d{4})/,"$3-$1-$2"));
    //其中$1,$2 $3表示重复正则中第一、第二、第三个小括号中内容
2.4正则表达式验证
2.4.1账号验证
/^\w{8,16}$/表示8到16位字母下划线数字
 //if(uname.match(/^[0-9A-Za-z_]{8,16}$/) == null){
        if(uname.match(/^\w{8,16}$/) == null){//
            alert("请输入8~16位的账号信息!");
            return false;
        }
        return true;
    }
2.4.2邮箱验证
/^\w+@\w+(.\w+){1,2}$/表示(字母下划线数字@字母下划线数字1到2个(.字母下划线数字))
 //执行验证
        if(email.match(/^\w+@\w+(\.\w+){1,2}$/) == null){
            alert("请输入正确的Email信息!");
            return false;
        }
        return true;
    }
                    