文章目录
正则表达式Regular Expression
1.正则表达式简介:
又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
2.正则表达式定义:
正则表达式是对字符操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
3.来源:
正则表达式可一直追溯到科学家对人类神经系统工作原理的早期研究。
4.含义:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
创建正则
-
第一种方式
var 变量=new RegExp(“正则表达式”,“匹配模式”);在构造函数中可以传递一个匹配模式作为第二个参数,可以是
i 忽略大小写
g 全局匹配模式
使用typeof检查正则对象,会返回object
eg:
var reg=new RegExp(“a”); 这个正则表达式可以用来检查一个字符 串中是否含有a
-
第二种方式
var 变量=/正则表达式/匹配模式 */使用字面量来创建正则表达式
正则中表达式 test()
test() 方法是正则表达式的一个方法,用于检测一个字符串是否匹配某个模式.
test 方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false。
每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置.
语法:regexp.test(str)
var str="a";
var res=reg.test(str);
console.log(res);
console.log(reg.test("cb"))
excise & apply
符合正则规则会返回true,反之返回false。
一:
var reg=new RegExp("a");
var str ="kkkk";
var result=reg.test(str);
console.log(result);
var reg=new RegExp(“a”); 这个正则表达式可以用来检查一个字符串中是否含有a。
二:
在构造函数中可以传递一个匹配模式作为第二个参数,可以是i 忽略大小写; g 全局匹配模式
var reg=new RegExp("a","i");
正则语法
-
使用字面量来创建正则表达式
语法: var 变量 = /正则表达式/匹配模式
使用字面量的方式创建更加简单,使用构造函数创建更加灵活。(可以传变量)
使用字面量的等价写法
var reg=/a/i;
常用语法
-
检查一个字符串中是否有a或b—>使用| 表示或者的意思
-
[]里的内容也是或的关系 [ab]==a|b
reg=/a|b/; = = reg=[ab];
-
创建一个正则表达式检查一个字符串中是否有字母
[a-z] :任意小写字母
[A-Z] :任意大写字母
[A-z] :任意字母
[0-9] :任意数字
【对于正表达式 🙉 [或] 🙉 只要有部分数据满足条件则会返回true】
var str="ac08754"; var reg=/[0-9]/; console.log(reg.test(str));--》true
var str="ac08754";
var reg=/[^0-9]/;
console.log(reg.test(str));-->true
- 检查一个字符串中是否含有abc或adc或aec
var reg=/a[bde]c/;
// var reg=/abc|adc|aec/;
var str ="aec";
var result=reg.test(str);
console.log(result);
- [^] :除了
除了了ab ,只要有一个不是ab里的就会返回true。
var str="ac";
var reg=/[^ab]/;
console.log(reg.test(str));---》true
量词
通过量词可以设置一个内容出现的次数,量词只对前一个内容起作用。
-
{n}表示整好出现n次
-
{m,n}表示出现m到n次
-
+表示至少一个,相当于{1,}。例如/a+/
-
表示0个或多个,相当于{0,}。例如/a/
-
?表示0个或1个,相当于{0,1}。例如/a?/
-
表示开头(检测一个字符串是否以某个字符开头)。例如/a/
-
$表示结尾(检测一个字符串是否以某个字符结尾)。例如/a$/
-
如果在正则表达式中同时使用和$(例如/a$/),则要求字符串完全符合正则表达式(必须为“a”,以a开头后立即以a结尾)
-
/^a|a$/表示以a开头或以a结尾
-
表示任意字符。例如/./
-
语法:var 正则对象 = /(正则表达式){量词}/匹配模式;
^a | a$: 以a开头或以a结尾
^a$: ----> 只有字符串为a时为true
以a开头且以a结束不限于一个a var reg=/^a\w*a$/;==
练习:验证手机号
转义字符
在正则表达式中使用\作为转义字符
注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串的转义字符,如果要使用\则需要用\来代替
\.表示.
\\表示
\w表示任意字母,数字
\W表示除了字母,数字
\d表示任意的数字
\D表示除了数字
\s表示空格
\S表示除了空格
\b表示单词边界
\B表示除了单词边界
var reg = new RegExp("\\.");
console.log(reg.test("a.bc"));
//true
reg = /\w/;
console.log(reg.test("123ad_"));
//true
reg = /\W/;
console.log(reg.test("123ad_%^&"));
//true
reg = /\d/;
console.log(reg.test("123"));
//true
reg = /\D/;
console.log(reg.test("123gfeuu%^7"));
//true
reg = /\s/;
console.log(reg.test(" "));
//true
reg = /\S/;
console.log(reg.test("ad "));
//true
//创建一个表达式检查一个字符串中是否含有单词child
reg = /child/;
console.log(reg.test("child"));
//true
reg = /child/;
console.log(reg.test("hello childrndgkagdu"));
//true,无法准确的检测出某个单词
reg = /\bchlid\b/;
console.log(reg.test("hello child dfuyfyud"));
//true
console.log(reg.test("hello childrndgkagdu"));
//false
reg = /\Bchlid\B/;
console.log(reg.test("hello childrndgkagdu"));
//true
//接受一个用户的输入
//var str0 = prompt("请输入用户名!");
var str = " hello world ";
//为了得到的结果美观,去除掉前后空格,中间的空格不变
//去除空格就是用""代替空格
str = str.replce(/\s/,"");
//只能去除第一个空格
str = str.replce(/\s/g,"");
//所有的空格都被去除,包括中间的空格
//去除开头的空格
str = str.replce(/^\s/g,"");
//只能去除第一个空格,只有第一个空格才算开头的空格
str = str.replce(/^\s*/,"");
//去除了开头0个或多个空格
//去除结尾的空格
str = str.replce(/\s*$/,"");
//去除了结尾0个或者多个空格
//去除开头或者结尾的空格
str = str.replce(/^\s*$/,"");
//一个空格都去除不了
str = str.replce(/^\s*|\s*$/,"");
//只去除了开头的空格
str = str.replce(/^\s*|\s*$/g,"");
//去除了开头和结尾的空格
console.log(str);
电子邮件的正则表达式
电子邮件的规则:
任意字母数字下划线.任意字母数字下划线@任意长度的字母数字.任意字母(2-5位).任意字母(2-5位)
ps:红色部分可有可无
电子邮件表达式:
\w{3,} (. \w+)* @ [A-z0-9]+ (. [A-z0-9]{2,5}){1,2}
var emailReg = /\w{3,}(\.\w+)*@[A-z0-9]+(\. [A-z0-9]{2,5}){1,2}/;
var email = "abc@abc.com";
console.log(emailReg.test(email));
//true
email = "abcabc.com";
console.log(emailReg.test(email));
//false
email = "abc@abc.com.123";
console.log(emailReg.test(email));
//true,因为前面abc@abc.com部分已经检测为正确的电子邮件,所以不检测后面部分
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\. [A-z0-9]{2,5}){1,2}$/;
email = "abc@abc.com.123";
console.log(emailReg.test(email));
//false
email = "156faw4e85gabc@abc.com.123";
console.log(emailReg.test(email));
//true
email = "1#$%%^gabc@abc.com.123";
console.log(emailReg.test(email));
//false
常用的正则表达式
// 验证帮助
var verifyUtils = {
// 验证输入的内容是否是空
isNull:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /\S/;
if(!regex.test(str)){
alert("文本框不能为空,请输入内容!");
}
},
// 验证输入的字符是否是英文字母
isLetter:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^[a-zA-Z]+$/;
if(!regex.test(str)){
alert("请输入正确的英文字母!");
}
// 验证日期格式是否为YYYY-MM-DD格式
},isDate:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(regex); // 使用match方法获取指定字符串的值
if(r==null){
alert("请输入正确的日期格式!");
}
// 验证日期格式是否为YYYY-MM-DD hh:mm:ss格式
},isDateTime:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
var r = str.match(regex); // 使用match方法获取指定字符串的值
if(r==null){
alert("请输入正确的日期格式!");
}
// 验证整数
},isInteger:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^[-+]?\d*$/;
if(!regex.test(str)){
alert("请输入正确的整数!");
}
// 验证双精度
},isDouble:function(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^[-\+]?\d+(\.\d+)?$/;
if(!regex.test(str)){
alert("请输入正确的小数!");
}
// 验证中文
},isChinese(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^[\u0391-\uFFE5]+$/;
if(!regex.test(str)){
alert("请输入正确的中文!");
}
// 验证邮箱
},isEmail(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if(!regex.test(str)){
alert("请输入正确的邮箱格式!");
}
// 验证手机号
},isPhone(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^1[3456789]\d{9}$/;
if(!regex.test(str)){
alert("请输入正确的手机号!");
}
// 验证身份证
},isIdCard(idStr){
var str = document.getElementById(idStr).value.trim();
var regex = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/;
if(!regex.test(str)){
alert("请输入正确的身份证号码!");
}
}
};
字符串和正则相关的方法–JS
支持正则表达式的String对象的方法
-
split(): 可以将一个字符串拆分为一个数组,方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
- eg:根据任意字母来将字符串拆分
var str="1a2s3d4h5j6k7"; var result=str.split(/[A-z]/); console.log(result);
输出结果:[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’]
【这个方法即使不指定全局匹配,也会全部插分】
-
search(): 可一搜索字符串中是否含有指定内容
【search()只会查找第一个,即使设置全局匹配也没用】
- match():可以根据正则表达式,从一个字符串中将符合条件的内容提取出来。
- replace():