像注册电子邮件,有格式,可以用人来查看,但是申请的太多加上人一段时间看的有限,这个肯定是效率极低的,但是我们计算机又不认识
所以出现了正则表达式规则
- 计算机可以根据正则表达式,来检查一个字符是否符合规范
- 获取将字符串中符合规则的内容提取出来
创建正则表达式的对象
//创建正则表达式的对象//语法//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)//falseconsole.log(result2)//trueconsole.log(result3)//true
//[]里面的内容也是或的关系;[ab]==a|breg = /[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或afcvar 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)//1a2b3c4d5e6fconsole.log(result)//1@_@2b3c4d5e6f
var str = "1a2a3a4d5e6f";var result = str.replace(/a/g,"@_@")console.log(str)//1a2a3a4d5e6fconsole.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"))//falseconsole.log(reg.test("b.java"))//true//字符串里面"\\"等于\
注意: 使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,如果使用\则需要使用\\来代替
var reg = new RegExp("\\.");
\w和\W
var reg = /\w/;//任意字母、数字、_;[A-z0-9_]console.log(reg.test("abc"))//truevar reg = /\W/;//除了字母、数字、_[^A-z0-9_]console.log(reg.test("abc"))//false
\d和\D
var reg = /\d/;//任意数字[0-9]console.log(reg.test("123"))//truevar reg = /\D/;//除了数字[^0-9]console.log(reg.test("123"))//false
\s和\S
var reg = /\s/;//空格console.log(reg.test("12 3"))//truevar 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"))//falseconsole.log(reg.test("hello child ren"))//true//\B除了单词边界
