本文最后更新于 2025-01-10T22:20:33+08:00
正则表达式 正则表达式介绍 通常情况下用户输入邮件格式:
1 2 3 4 5 6 7 * - admin@atguigu.com* - admin@.com adminatguigu.com* - 邮件的规则:* 1.前边可以是xxxx乱七八糟* 2.跟着一个@* 3.后边可以是xxxx乱七八糟* 4..com获取其他的乱七八糟
正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则, 获取将字符串中符合规则的内容提取出来(给计算机看的一种规则,它也是一个对象)
创建正则表达式的对象
正则表达式的方法:test() 1 2 3 4 5 6 7 8 9 var result = reg.test (str);console .log (reg.test ("Ac" ));
正则表达式语法 使用字面量来创建正则表达式: 1 2 3 4 5 6 7 8 9 10 var reg = new RegExp ("a" ,"i" );var reg = /a/i ;
逻辑判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 reg = /a|b|c/ ; reg = /a|b|c|d|e|f|g/ ; reg = /[A-z]/ ; reg = /a[bde]c/ ; reg = /[^ab]/ ;
量词 1 2 3 4 5 6 7 8 9 * 量词* - 通过量词可以设置一个内容出现的次数* - 量词只对它前边的一个内容起作用* - {n} 正好出现n次* - {m,n} 出现m-n次* - {m,} m次以上* - + 至少一个,相当于{1,}* - * 0个或多个,相当于{0,}* - ? 0个或1个,相当于{0,1}
开头结尾 1 2 3 4 5 6 7 8 9 10 11 12 reg = /^a/ ; reg = /a$/ ; reg = /^a$/ ;
练习: 创建一个正则表达式,用来检查一个字符串是否是一个合法手机号
1 2 3 4 5 6 7 8 9 10 11 * 手机号的规则: * 1 3 567890123 (11 位) * * 1. 以1 开头 * 2. 第二位3 -9 任意数字 * 3. 三位以后任意数字9 个 * * ^1 [3 -9 ] [0 -9 ]{9 }$\var phoneStr = "13067890123" ;var phoneReg = /^1[3-9][0-9]{9}$/ ;
元字符 如何检查一个字符串中是否含有 . . 表示任意字符 在正则表达式中使用\作为转义字符 . 来表示.
1 2 3 4 5 6 7 8 var reg = /\./ ;`` `` \\ 表示\ 注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符, 如果要使用\则需要使用\\来代替`` `js reg = new RegExp("\\."); reg = new RegExp("\\\\");
* \w
* - 任意字母、数字、_ [A-z0-9_]
* \W
* - 除了字母、数字、_ [^A-z0-9_]
* \d
* - 任意的数字 [0-9]
* \D
* - 除了数字 [^0-9]
* \s
* - 空格
* \S
* - 除了空格
* \b
* - 单词边界
* \B
* - 除了单词边界
例子:去除字符串中的空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var str = " he llo " ;console .log (str); str = str.replace (/^\s*/ , "" ); str = str.replace (/\s*$/ , "" ); str = str.replace (/^\s*|\s*$/g ,"" );console .log (str);
正则表达式的方法 字符串和正则相关的方法 split() split()
- 可以将一个字符串拆分为一个数组
- 方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
- 这个方法即使不指定全局匹配,也会全都插分
1 2 3 4 5 var str = "1a2b3c4d5e6f7" ;var result = str.split (/[A-z]/ );
search() * - 可以搜索字符串中是否含有指定内容
* - 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
* - 它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
* - serach()只会查找第一个,即使设置全局匹配也没用
1 2 3 4 5 str = "hello abc hello aec afc" ; result = str.search (/a[bef]c/ );
match() * - 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
* - 默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索
* 我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
* 可以为一个正则表达式设置多个匹配模式,且顺序无所谓
* - match()会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
1 2 3 str = "1a2a3a4a5e6f7A8B9C" ; result = str.match (/[a-z]/ig );
replace() * - 可以将字符串中指定内容替换为新的内容
* - 参数:
* 1.被替换的内容,可以接受一个正则表达式作为参数
* 2.新的内容
* - 默认只会替换第一个
1 2 result = str.replace (/[a-z]/gi , "@_@" ); result = str.replace (/[a-z]/gi , "" );
练习 邮件的正则表达式 电子邮件: hello .nihao @ abc .com.cn 任意字母数字下划线 .任意字母数字下划线 @ 任意字母数字 .任意字母(2-5位) .任意字母(2-5位) \w{3,} (.\w+)* @ [A-z0-9]+ (.[A-z]{2,5}){1,2}
1 2 3 4 5 var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/ ;var email = "abc.hello@163.com" ;console .log (emailReg.test (email));