失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 正则表达式(正则表达式的方法和属性 正则的修饰符 表达式 元字符 量词)

正则表达式(正则表达式的方法和属性 正则的修饰符 表达式 元字符 量词)

时间:2022-05-20 19:27:46

相关推荐

正则表达式(正则表达式的方法和属性 正则的修饰符 表达式 元字符 量词)

什么是正则表达式

正则表达式是一种规则而这种规则能够匹配字符串的一种匹配模式,专门为简化字符串操作而生的

正则表达式的创建方式字面量形式

var reg = /2/;//创建正则表达式(字面量形式)console.log(reg)

正则表达式是由,两波反斜杠包裹的数据/2/

那么正则表达式,是什么数据类型的呢??

var reg = /2/;console.log(typeof reg)//检查正则表达式的数据类型

object说明了正则表达式是一个对象

正则是一个引用数据类型typeof 正则 --> 'object'

正则表达式的方法和属性

reg.test(str)检测str中有没有符合reg的规则

var reg = /e/;var str = 'huasheng';console.log(reg.test(str));

var reg = /e/;console.log(reg.test("acdp"));

不仅仅规则可以写单个字母,还可以写验证规则用在test方法上

var reg = /(h|g)e/;//|号表示或者的意思//这个规则的意思是匹配he或者是gevar str = 'huasheng';console.log(reg.test(str));

reg.test(字符串)检验字符串中有没有reg对应的规则

如果有 则返回true如果没有 则返回false

str.match(正则) 按照指定的正则规则匹配出str中的符合规则的字符

var str = /n/;var reg = "huashengn";console.log(reg.match(str));

str.match()的方法返回的是一个数组,他的第一项表示匹配出来的数据,第二项index表示匹配出来的数据在索引几,第三项input表示你匹配的原始字符串

str.match(正则)字符串方法

按照指定的正则规则 匹配出str中的符合规则的字符如果没有匹配出来 则返回null

正则的修饰符

i忽略大小写

var str = /Hu/i;//规则var reg = "huasheng";//要检验的字符串console.log(str.test(reg))

str验证reg中有没有Hu字母,/杠后面的i表示在查询对应的规则时忽略大小写,给过是true

g全局匹配

var str = /h/g;//规则var reg = 'huasheng';//要检验的字符串console.log(reg.match(str));

str检查reg中有没有h字母,/杠后面的g表示在查询对应的规则时并全局匹配,给过是["h", "h"]

g全局匹配i忽略大小写可以同时写,如:

var str = /h/ig;//匹配规则var reg = "HuahsHeng";//要匹配的字符串console.log(reg.match(str));

str检查reg中有没有h字母,/杠后面的ig表示在查询对应的规则时并忽略大小写和全局匹配,给过是["H", "h", "H"]

总结

正则的修饰符 修饰符的顺序可以颠倒i忽略大小写i是取ingorecase单词的首字母g全局匹配g是取global单词的首字母

表达式

表达式作用:表示的是字符串的区间

[a-z]表示a-z中的任何一个数据

var str = /[a-z]/g;//正则表达式,并全局匹配var reg = "h1u2s3";//要匹配的字符串console.log(reg.match(str));

str检查reg的字符串,匹配出来的数据是[a-z]的字母不包含别的数据,并且全局匹配,结果是["h", "u", "s"]

[acde]表示acde中的任何一个数据

var src = /[abd]/g;//要匹配的条件var tag = "huasheng";//要匹配的字符串console.log(tag.match(src));

str检查reg的字符串,匹配出来的数据是[acde]的字母不包含别的数据,并且全局匹配,结果是["a"]

[^acde]表示除了acde中的任何一个数据

var src = /[^hse]g/;//要匹配字符串的规则var reg = "huasheng";//要匹配的字符串console.log(reg.match(src));

str检查reg的字符串,匹配出来的数据是除了[acde]的字母不包含别的数据,并且全局匹配,结果是["u", "a", "n", "g"]

还可以用许多形式写正则表达式

[acde]表示acde中的任何一个数据[^acde]表示除了acde中的任何一个数据[a-z]表示a-z中的任何一个数据[A-Z]表示A-Z中的任何一个数据[A-z]表示A-z中的任何一个数据[0-9]表示0-9中的任何一个数据[\u67d7\u65d7\u00d1\u5d08]表示对应unicode编码的任意一个中文字符

元字符

元字符本质也是表达式,也是用来表示字符的区间,注意元字符也只能匹配一个字符

\w表示[0-9A-z_]中的任何一个数据

var str = 'hus2h7ng_';//要匹配的字符串var reg = /\w/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是[0-9A-z_]的字母和_不包含别的数据,并且全局匹配,结果是["h", "u", "s", "2", "h", "7", "n", "g", "_"]\w是word英文的简写

\W表示除了[0-9A-z_]中的任何一个数据

var str = 'hus2h7n g_';//要匹配的字符串var reg = /\W/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了\w的元字符不包含别的数据,并且全局匹配,结果是[" ", " ", " "]

\d表示[0-9]中的任何一个数据

var str = 'hus2h7ng_';//要匹配的字符串var reg = /\d/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是\d的元字符不包含别的数据,并且全局匹配,结果是["2", "7"]\d是digital英文单词的简写

\D表示不是[0-9]中的任何一个数据

var str = 'hus2h7ng_';//要匹配的字符串var reg = /\D/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了\d的元字符不包含别的数据,并且全局匹配,结果是["h", "u", "s", "h", "n", "g", "_"]

\s表示匹配中能够使字符串产生间隙的字符([\n\f\r\t\v ]都能让字符串产生间隔)

var str = 'hns2 h7 ng_';//要匹配的字符串var reg = /\s/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了能让字符产生间隙的字符(空格键和Tab键),不包含别的数据,并且全局匹配,结果是[" ", " "]\s是space英文的简写

\S表示匹配中不能,使字符串产生间隙的字符

var str = 'hns';//要匹配的字符串var reg = /\S/g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了不能让字符串产生间隔的字符,不包含别的数据,并且全局匹配,结果是["h", "n", "s"]

.表示匹配除了换行之外的字符**

var str = 'hn\ns';//要匹配的字符串var reg = /./g;//匹配字符串的条件console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除换行符之外的所有字符,不包含别的数据,并且全局匹配,结果是["h", "n", "s"]

量词

无论表达式还是元字符都只能匹配到一个字符无法匹配多个字符,所以引入量词的概念,用来设置匹配到字符的个数

var str = "huasheng";var reg = /\w{2}/;//量词是用花括号来写的,里面写数量//表示匹配了2个在\w剧中的字符console.log(str.match(reg));

那么用g全局匹配呢???

情况一

var str = "huasheng";var reg = /\w{2}/g;//会匹配指定个数在字符区间中的字符console.log(str.match(reg));

那么就会匹配到了hu还不够,有让我全局匹配as,he,ng,那匹配出来的结果是…

每一次匹配都会匹配到2个字符,因为你在花括号里面给了数量了,如果不给数量的话,那么也会全局匹配,第一次只能匹配出来一个字符然后一次往下匹配。

情况二

var str = "huasheng";var reg = /\w{5}/g;console.log(str.match(reg));

那么你指定的个数,不满足匹配字符串的倍数呢??

那会先匹配前面符合字符的个数,即使全局匹配了也没有用

那么能不能匹配2-3个字符呢??

var str = "hu12as34he567ng";var reg = /\d{2,3}/g;//那么这样写会匹配到2个或者3个字符console.log(str.match(reg));

当使用量词的时候,2个字符或者是3个字符,当满足条件的时候,那么就会贪婪匹配(尽可能多的匹配),当每次匹配的时候就会尽可能多的匹配。每次匹配的时候满足规则就能够去3个的时候决不取2个(当满足点前规则的时候尽可能多的匹配)

那么遇到{2,}这种情况的结果是什么呢

var str = "hu123g45677y55i";var reg = /\d{2,}/g; console.log(str.match(reg));

那么当你每次匹配的时候至少匹配2个字符

那该怎么匹配至少一个字符呢??

var str = "hu123g45677y55i";var reg = /\d+/g;//表示匹配数量,至少一个,他会匹配到一个符号条件的时候会贪婪匹配console.log(str.match(reg));

那该怎么匹配至少0个字符呢??

var str = "hu123g45677y55i";var reg = /\d*/g;//*表示至少0个数字console.log(str.match(reg));

x?匹配[0,1]个字符

var str = "hu123g45677y55i";var reg = /\d?/g;//*表示至少0个数字console.log(str.match(reg));

那么只要牵扯出来匹配0个字符,那么肯定会有很对空串出来的,那么牵扯到0的不常用。

那么该怎么取消贪婪匹配呢??

var str = "hu123g45677y55i";var reg = /\d{2,3}?/g;console.log(str.match(reg));

在量词后面加上?号 就能够取消贪婪匹配

总结

无论是表达式还是元字符都只能匹配一个字符

量词:表示数量 尽可能多匹配字符贪婪匹配)在量词后面加上?就能够取消贪婪匹配

{x}匹配x个字符{x,y}匹配[x,y]个字符{x,}匹配至少x个字符x+匹配至少一个字符x*匹配至少0个字符x?匹配[0,1]个字符

如果觉得《正则表达式(正则表达式的方法和属性 正则的修饰符 表达式 元字符 量词)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。