正则表达式
概念:
- 定义一些字符串的规则
- 计算机可以根据正则表达式 来检查一个字符串是否符合规则
- 获取将字符串中符合规则的内容提取出去
- 正则表达式是个对象
创建正则表达式对象:
var 变量=new RegExp(“正则表达式”,“匹配模式”);
var reg=new RegExp("a");//检查一个字符串里面是否含有a
在构造函数里可以传递一个匹配模式做第二个参数可以是
- i忽略大小写
- g 全局匹配模式(在后面讲到)
var reg=new RegExp("A","i");
正则表达的方法 test();
检查一个字符串是否符合正则表达式的规则
var str="a";
var result=reg.test(str);
console.log(result);
使用字面量创建正则表达式
- var 变量=/正则表达式/匹配模式
- 使用字面量更加简单
- 使用字面量更加灵活
var reg=/a/i;
console.log(reg.test("acad"));//true
一些正则表达式的语法
//创建一个正则表达式检查一个字符串是否有a或者有b
var reg=/a|b/;//还可以继续加
console.log(reg.test("aaasd"));//true
reg=/[ab]/;//[]也是或的意思
console.log(reg.test("aasd"));//true
//创建一个正则表达式 检查一下字符串里面是否有字母
reg=/[A-z]/;
console.log(reg.test("12323"));//false
/*[a-z]表示a到z小写
*[A-Z]表示大写
*[A-z]表示任意字母
* [0-9]任意的数字
*/
//检查一个字符串是否含有abc或adc或afc;
reg=/a[bdf]c/ //以a开头c结尾中间任意
console.log(reg.test("aec"));//false
//检查一个字符串是否含有除了ab的字符;
reg=/[^ab]/;
console.log(reg.test("c"));//true
console.log(reg.test("ab"));//false
console.log(reg.test("abc"));//true
一些正则表达式的量词
量词 通过量词可以设置内容出现的次数
- 只对前边的一个内容起作用
- {n}正好出现n次
- {m,n}出现m到n次
- {m,}m次以上
- +至少一个 相当于{1,}
- *0个或多个 相当于{0,}
- ?0个或1个 相当于{0,1}
var reg=/a{3}/;
reg=/ab{3}/; //a三个b
console.log(reg.test("ababab"));//false
reg=/(ab){3}/;//三个ab
console.log(reg.test("ababab"));//true
reg=/b{3}/;
console.log(reg.test("bbbb"));//true
reg=/ab{1,3}c/ //b出现1到3次
console.log(reg.test("abbbbc"));//false
console.log(reg.test("abbc"));//true
reg=/ab+c/;//b出现至少一次
console.log(reg.test("abc"));//true
reg=/ab*c/;//b出现0次以上包括0次
console.log(reg.test("ac"));//true
console.log(reg.test("abc"));//true
reg=/ab?c/;//b出现0次或1一次
console.log(reg.test("abbc"));//false
检查正则表达式的开头结尾
- ^表示开头
- $表示结尾
检查一个字符串是否以a开头
reg=/^a/; //匹配开头的a
reg=/a$/; //匹配结尾的a
如果在正则表达式中同时使用^ $则要求字符串必须完全符合正则表达式
reg=/^a$/;
console.log(reg.test("a"));//true
reg=/^a|a$/;//以a开头或者以a结尾
console.log(reg.test("sd"));//false
下面来判断一个手机号码的正则表达式
reg=/^1[3-9][0-9]{9}$/;
很简单的一个正则表达式,以1开头第二位必须是3到9后面就为是0-9任意一位.
这里如果没有^ $表示在某个字符串里面有没有电话号码 而我们现在只要判断这个字符串是不是一个电话号码
正则表达式的转义字符
在正则表达式里如果要判断一个表达式是否为有.这个符号不能直接写
var reg=/./;
因为.这个符号表示任意字母
console.log(reg.test("adwq"));//true
这里就需要转义字符
reg=/\./;
console.log(reg.test("."));//true
console.log(reg.test("adwq"));//false
如果要使用构造函数 由于他的参数是一个字符串 /是字符串中的转义字符 如果要使用\则需要使用\来代替
reg=new RegExp("\\.");
console.log(reg);
接下来再演示一些别的转义字符
* \w
* -任意字母 数字 下划线[A-z 0-9 _]
* \W
* -除了任意字母 数字 下划线[^A-z 0-9 _]
* \d
* -任意数字[0-9]
* \D
* -除了数字[^0-9]
* \s
* -空格
* \S
* -除了空格
* \b
* -单词边界
* \B
* -除了单词边界
reg=/\w/;
console.log(reg.test("abc"));//true
reg=/\W/;
console.log(reg.test("Aasd"));//false
//这里\d与\D和上面同理
reg=/\s/;
console.log(reg.test(" asd"));//true
reg=/\S/;
console.log(reg.test(" "));//false
//创建一个函数表达式检查一个字符串中是否含有单词child
reg=/child/;
console.log(reg.test("children"));//true
reg=/\bchild\b/;
console.log(reg.test("hello children"));//false因为没有单词child不是是否含有child这个字符串所以是false
而除了单词边界就是字符串中没有这个单词则返回true有则返回false
这里 说一下全局模式g,一般正则表达式在字符串中匹配时,匹配到第一个符合结果的便结束
如
var str="1a2b3c4d5e6f7B8T9C8";
result=str.match(/[A-z]/i);
console.log(str);
这里的结果只有一个a的数组,而加上g之后
result=str.match(/[A-z]/gi);
它的结果是这样的
这就是全局匹配,会匹配所有符合条件的字符
来源:CSDN
作者:睡什么觉,起来打代码
链接:https://blog.csdn.net/qq_42193790/article/details/104094869