正则表达式
- 什么是正则表达式
- 正则表达式的创建
- 正则表达式的语法
- 字符串结合正则表达式的使用(重点)
-
电子邮箱和手机号码的格式测试
一、什么是正则表达式
正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,获取将字符串中符合规则的内容提取出来。
二、正则表达式的创建
①创建正则表达式的对象:
语法: var 变量 = new RegExp("正则表达式" , ["匹配模式"]);
②以字面量来创建正则表达式:
语法:var reg=/正则表达式/[匹配模式];
匹配模式:
- i 忽略大小写
- g 全局匹配模式
var str1="hello world";
var str2="abcde";
var str3="A";
//创建正则表达式
var reg = new RegExp("a","i");
//或者var reg = /a/i;
document.write(reg); //返回/a/
document.write(typeof reg); //返回object
// 正则表达式的方法reg.test()
result = reg.test(str1); //返回false
document.write(result);
result = reg.test(str2); //返回true
document.write(result);
result = reg.test(str3); //返回true
document.write(result);
三、正则表达式的语法
/*基础
- /x/ 存在x
- []里的内容是或的关系
- [ab] == a|b
- [a-z] 任意小写字母
- [A-Z] 任意大写字母
- [A-z] 任意字母
- [^] 除了^后面的内容
- [0-9] 任意数字
- [a-b] 数字a到数字b之间的任意数字
- ......
*/
var reg = "";
reg = /a/ //存在a
reg = /a|b/; //a或b
reg = /[ab]/; //a或b
reg = /[a-z]/; //任意小写字母
reg = /[A-Z]/; //任意大写字母
reg = /[A-z]/; //任意字母
reg = /[0-9]/; //任意数字
reg = /[^ab]/; // 除了^后面的内容
/*量词
- a{n} a正好出现n次
- (ab){n} ab正好出现n次
- ax{n}b a和b之间的x存在不止n次
- ac{x,y}b a和b之间的c出现x到y次,包括x和y
- ac{x,}b a和b之间的c出现至少x次,包括x
- ac+b +代表至少出现一个,a和b之家的c至少出现一次
- ac*b *代表出现0或多个 [零,正无穷]
- ac?b ?代表出现0或1次 [0,1]
- ^a ^表示开头,检查字符串是否以a开头
- a$ $表示结尾,检查字符串是否以a结尾
- ^a$ a即是开头,也是结尾 (正则表达式中同时使用^$则要求字符串必须完全符合正则表达式)
- ^a|a$ 以a开头或以a结尾
*/
var reg="";
reg = /a{n}/ //a正好出现n次
reg = /(ab){n}/ //ab正好出现n次
reg = /ax{n}b/ //a和b之间的x存在不止n次
reg = /ac{x,y}b/ //a和b之间的c出现x到y次,包括x和y
reg = /ac{x,}b/ //a和b之间的c出现至少x次,包括x
reg = /ac+b/ //+代表至少出现一个,a和b之家的c至少出现一次
reg = /ac*b/ //*代表出现0或多个 [零,正无穷]
reg = /ac?b/ //?代表出现0或1次 [0,1]
reg = /^a/ //^表示开头,检查字符串是否以a开头
reg = /a$/ //$表示结尾,检查字符串是否以a结尾
reg = /^a$/ //a即是开头,也是结尾
reg = /^a|a$/ // 以a开头或以a结尾
reg = /^a|a$/ //以a开头或以a结尾
例:创建一个正则表达式,检查一个字符串是否是一个合法手机号
---手机号规则:
-1 3-9 123456789 一共11位数字
-1、以1开头
- 2、第二位为3-9任意数字
-3、三位以后任意数字9个
伪代码:^1 [3-9] [0-9]{9}$
var reg = /^a[3-9][0-9]{9}$/;
alert(reg.test("13920325468"));
/*检查字符串是否含有.
.在正则表达式中表示任意字符
在正则表达式中使用\作为转义字符
\\表示\
\.表示.
- . 任意字符
- /\./ 含有.
注意:正则表达式的构造函数的参数是字符串,要想使用\,则需对其转义\\后,才能输出\\.
*/
var reg1 = /\./; //含有.
var reg2 = new RegExp("/\\./");
alert(reg1.test("sa.21xas"));
alert(reg2.test("sa21xas"));
/*元符号
- 拥有特殊含义的字符
- \w - 任意字母、数字和下划线_ - [A-z0-9_]
- \W - 除了字母、数字和下划线之外的字符 - [^A-z0-9_]
- \d - 任意的数字 - [0-9]
- \D - 除了数字 -[^0-9]
- \s - 空格 -
- \S - 除了空格 -
- \b - 单词边界 \b单词\b -
- \B - 除了单词边界 -
var w = /\w/;
var W = /\W/;
var d = /\d/;
var D = /\D/;
var s = /\s/;
var S = /\S/;
var b = /\bword\b/;
var B = /\Bword\B/;
例:取名字,自动去除空格
1、去除开头和结尾的空格
var str = prompt("请输入名字:");
//去除开头的空格
result = str.replace(/^\s*/ , "");
//去除结尾的空格
result = str.replace(/\s*$/,"");
//合并 去除结尾和开头的空格
result = str.replace(/^\s*|\s*$/g,"");
//测试结果是否相同
alert(result == str);
2、去除所有空格
var str = prompt("请输入名字:");
//去除所有空格
result = str.replace(/\s/g , "");
//测试结果是否相同
alert(result == str);
四、字符串结合正则表达式的使用(重点)
支持正则表达式的String对象方法(字符串)
- split()
- search()
- match()
- replace()
1、split()方法
- 该方法将一个字符串拆分成一个数组
- 方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
- 不需要设置全局匹配g,也会全部都拆分
例:根据任意字母拆分字符串
var str = "1a2b3c4d5e";
var result = str.split(/[A-z]/); //根据任意字母拆分字符串
document.write(result);
2、search()方法
- 可以搜索字符串中是否含有指定内容,有则返回指定内容的第一个值的索引值,无则返回-1
- 可以接受一个正则表达式作为参数,根据正则表达式去检索字符串
- 全局匹配g对该方法无效,只会返回第一个结果
例:搜索字符串中是否含有abc或aec或afc
var str = "avc aec dcs dsf";
result = str.search(/a[bef]c/); //搜索字符串中是否含有abc或aec或afc
document.write(result);
3、match()方法(可用于爬取信息)
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来,将结果保存在数组里
- 默认情况下match只会找到第一个符合要求的内容,找到就停止检索
- 设置正则表达式为全局匹配模式g,就会匹配所有的内容
例:提取字符串中的所有字母
var str = "1a2b3c4d5e6fg";
result = str.match(/[A-z]/); //提取字符串中的第一个字母
result = str.match(/[A-z]/g); //提取字符串中的所有字母
document.write(result);
4、replace()方法
- 可以将字符串中指定内容替换为新的内容,默认只会替换符合要求的第一个
- replace(a,b) 参数a->被替换内容,参数b->新内容
例:替换字符串中的所有a为@
var str = "1aadacafdfwfcsdve2134fsdasfwe";
result = str.replace(/a/,"@"); //只有第一个a被替换
result = str.replace(/a/g,"@"); //所有a被替换
document.write(result);
五、电子邮箱和手机号码的格式测试
正则表达式 电子邮箱和手机号码的格式测试https://blog.youkuaiyun.com/qq_41604269/article/details/83576875