JavaScript正则表达式

妖精的绣舞 提交于 2020-01-29 15:43:47

正则表达式

概念:

  • 定义一些字符串的规则
  • 计算机可以根据正则表达式 来检查一个字符串是否符合规则
  • 获取将字符串中符合规则的内容提取出去
  • 正则表达式是个对象

创建正则表达式对象:

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);

它的结果是这样的
在这里插入图片描述
这就是全局匹配,会匹配所有符合条件的字符

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!