像注册电子邮件,有格式,可以用人来查看,但是申请的太多加上人一段时间看的有限,这个肯定是效率极低的,但是我们计算机又不认识
所以出现了正则表达式规则
- 计算机可以根据正则表达式,来检查一个字符是否符合规范
- 获取将字符串中符合规则的内容提取出来
创建正则表达式的对象
//创建正则表达式的对象
//语法
//var 变量 = new RegExp("正则表达式","匹配模式")
//在构造函数中可以传递一个匹配模式作为第二个参数
//i: 忽略大小写
//g: 全局匹配模式
var reg = new RegExp("a")
console.log(reg)//'/a/'就是创建好的正则表达式
类型是
console.log(typeof reg)//object
正则表达式方法
test
使用这个方法可以用来检查一个字符串是否符合正则表达式的规则。如果符合则返回**true**
,否则返回**false**
var str = "a"
var result = reg.test(str)
console.log(result)//a: true ,除a任何值都为false;有a就是true
var reg = new RegExp("a","i");
var str = "Abc"
var result = reg.test(str)
console.log(result)
使用字面量来创建正则表达式
语法: **var 变量 = /正则表达式/匹配模式**
reg = /a/i;
var str = "Abc"
var result = reg.test(str)
console.log(result)
- 使用字面量的方式创建更加简单
- 使用构造函数创建更加灵活
创建一个正则表达式,检查一个字符串中是否有a或b
reg = /a|b/;//使用'|'表示或者的意思
var str1 = "cd"
var str2 = "ac"
var str3 = "bv"
var result1 = reg.test(str1)
var result2 = reg.test(str2)
var result3 = reg.test(str3)
console.log(result1)//false
console.log(result2)//true
console.log(result3)//true
//[]里面的内容也是或的关系;[ab]==a|b
reg = /[ab]/;
var str1 = "cd"
var str2 = "ac"
var str3 = "bv"
var result1 = reg.test(str1)
var result2 = reg.test(str2)
var result3 = reg.test(str3)
console.log(result1)
console.log(result2)
console.log(result3)
//[a-z]表示任意的小写字母
//[A-Z]表示任意的大写字母
//[A-z]表示任意字母
reg = /[a-z]/;
var str1 = "cd"
var str2 = "ac"
var str3 = "bv"
var result1 = reg.test(str1)
var result2 = reg.test(str2)
var result3 = reg.test(str3)
console.log(result1)
console.log(result2)
console.log(result3)
reg = /a[bde]c/;
var str1 = "abc"
var str2 = "adc"
var str3 = "aec"
var result1 = reg.test(str1)
var result2 = reg.test(str2)
var result3 = reg.test(str3)
console.log(result1)
console.log(result2)
console.log(result3)
[^ ]: 除了
reg=/[^ab]/
var str = "ab"
var result = reg.test(str)
console.log(result)//fales
reg=/[^ab]/
var str = "abc"
var result = reg.test(str)
console.log(result)//true
字符串和正则相关的方法
search:检索与正则相匹配的值
像indexOf
可以搜索字符串中是否有指定内容
var str = "hello abc hello abc";
var result = str.search("abc")
console.log(result)
6
如果搜索到指定内容则会返回第一次出现的索引
,如果没有搜索到则返回-1
它可以接收一个正则表达式作为参数,然后会根据我们正则表达式去检索字符串
var str = "hello abc aec afc";
//搜索字符串中是否包含有abc,aec或afc
var result = str.search(/[a[bef]c/)
console.log(result)
match: 找到一个或多个正则表达式的匹配
var str = "1a2b3c4d5e6f";
var result = str.match(/[A-z]/)
console.log(result)
['a', index: 1, input: '1a2b3c4d5e6f', groups: undefined]
默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索,我们可以设置我们的正则表达式为全局匹配模式,这样就可以匹配到所有的内容
var str = "1a2b3c4d5e6f";
var result = str.match(/[A-z]/g)
console.log(result)
['a', 'b', 'c', 'd', 'e', 'f']
可以为正则表达式设置多个匹配模式且顺序无所谓
var str = "1a2b3c4d5e6f7A8B9C";
var result = str.match(/[a-z]/ig)
console.log(result)
match()
会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
var str = "1a2b3c4d5e6f7A8B9C";
var result = str.match(/[a-z]/ig)
console.log(result)
console.log(Array.isArray(result))
可以根据正则表达式从一个字符串中将符合条件的内容提取出来
replace: 替换正则表达式子串
可以将字符串的指定内容替换为新的内容
//1.被替换的被人
//2.新的内容
//不会影响到原字符串
var str = "1a2b3c4d5e6f";
var result = str.replace("a","@_@")
console.log(str)//1a2b3c4d5e6f
console.log(result)//1@_@2b3c4d5e6f
var str = "1a2a3a4d5e6f";
var result = str.replace(/a/g,"@_@")
console.log(str)//1a2a3a4d5e6f
console.log(result)//1@_@2@_@3@_@4d5e6f
var str = " hello ";
console.log(str)
str = str.replace(/\s/,"");
console.log(str)//" hello "
str = str.replace(/\s/g,"")
console.log(str);//"hello"
split: 把字符串分割为字符串数组
var str = "1a2b3c4d5e6f";
var result = str.split("c");
console.log(result.length)
console.log(result)
2
(2) ['1a2b3', '4d5e6f']
根据正则表达式去拆分字符串
var str = "1a2b3c4d5e6f";
var result = str.split(/[A-z]/);
console.log(result.length)
console.log(result)
7
(7) ['1', '2', '3', '4', '5', '6', '']
量词
通过量词可以设置一个内容出现的次数
//var reg = /a/;//这是一个a
//var reg = /a{3}/;//要找a而且要同时出现3次。{n}正好出现n次
//var reg = /ab{1,3}c/;//{m,n}出现m-n次
var reg = /ab{3,}c/;//{m,}:m次以上
- n+: 匹配任何包含至少一个n的字符串。相当于
{1,}
- n*: 匹配任何包含0个或多个n的字符串。相当于
{0,}
- n?: 匹配任何包含0个或多个n的字符串。相当于
{0,1}
- n{x}:匹配包含X个n的序列的字符串
- n{x,y}: 匹配包含x或y个n的序列字符串
- n{x,}: 匹配至少x个n的序列字符串
- n
/`
var reg = /a$/;//匹配结尾的a
- ^n: 匹配任何开头为n的字符串,比如
/^a/
var reg = /^a/;//匹配开头的a
- ?=n: 匹配任何其后紧接指定字符串n的字符串
- ?!n: 匹配任何其后没有紧接指定字符串n的字符串
元字符
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找单个字符 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 查找NULL字符 |
\n | 查找换行字符 |
\f | 查找换页字符 |
\r | 查找回车符 |
\t | 查找制表符 |
\v | 查找垂直制表符 |
\xxx | 查找以八进制数xxx规定的字符。 |
\xdd | 查找以十六进制数dd规定的字符 |
\uxxxx | 查找以十六进制数xxxx规定的Unicode字符 |
\.
var reg = /\./
console.log(reg.test("b"))//false
console.log(reg.test("b.java"))//true
//字符串里面"\\"等于\
注意: 使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,如果使用\则需要使用\\
来代替
var reg = new RegExp("\\.");
\w
和\W
var reg = /\w/;//任意字母、数字、_;[A-z0-9_]
console.log(reg.test("abc"))//true
var reg = /\W/;//除了字母、数字、_[^A-z0-9_]
console.log(reg.test("abc"))//false
\d
和\D
var reg = /\d/;//任意数字[0-9]
console.log(reg.test("123"))//true
var reg = /\D/;//除了数字[^0-9]
console.log(reg.test("123"))//false
\s
和\S
var reg = /\s/;//空格
console.log(reg.test("12 3"))//true
var reg = /\S/;//除了空格
console.log(reg.test("12 3"))//false
\b
和\B
我要找单独的child
var reg = /child/;
console.log(reg.test("hellochildren"))//true
//我要单独找child,他们必须和child分开:"hello child ren"
var reg = /\bchild\b/;//单词边界
console.log(reg.test("hellochildren"))//false
console.log(reg.test("hello child ren"))//true
//\B除了单词边界