正则表达式入门
什么是正则?正则是用于匹配字符串的字符组合的模式。正则不是一门编程语言,而是编程语言中会用到的一个工具,不管什么编程语言,都会用到正则表达式。
".+"表示"某" ".+keai" 成功匹配
再举个栗子: "chi.+" 成功匹配
为什么用正则?除了正则,可以在程序中写一个解析器代替正则的工作。但是有了正则,一行代码就可以搞定~ 正则核心语法一个很好用的在线解析正则的网站 最简单的情况:直接用文字匹配
以下情况无法匹配 因为圆葱aa是一个整体 在下面的字符串找不到匹配字符
当想要匹配圆某时 可以使用"圆."来匹配
不难判断出 栗子1: 栗子2:
注意:断行不可匹配!!!!如下图
一个特殊情况 当我们想要匹配3.14时 图中匹配的结果却是3.14和3-14
这是因为"."代表任意字符
2."w" 匹配阿拉伯数字,英文大小写字母和下划线(类似于用户名的格式)
3."W" 匹配被"w"排除在外的字符("w"的补集)
4."d" 匹配阿拉伯数字
注意:"d.d"匹配小数
5."D" 匹配非阿拉伯数字 包括空格("d"的补集)
6."s" 匹配空白字符:空格 制表符 断行等
7."S" 匹配被"s"排除在外的字符("s"的补集)
8."[]"字符集合方括号中填写出现的可能性(范围) 整个括号算一个字符 举个栗子:
"-"在"[ ]"表示表示从一个字符到另一个字符 匹配a到z
匹配0到9
9.当需要匹配中文时 使用Unicode 可以查询Unicode的网站
10."[范围]+"重复一次或多次
注意特殊情况 (应用到前面所说 方括号代表范围)
11."[范围]*"重复零次或多次
12."[范围]?"重复零次或一次
13."{a,b}"指定重复范围(a到b次)
"b" word boundary 单词边界
想精确匹配一段字符 必须重复几次 也可在花括号中指定
想指定某字符至少重复几次 也可在花括号中指定 至少重复两次
{0,}相当于"+" {0,1}相当于"?" {1,}相当于"*" 14.分组匹配
首先 使用圆括号将两个人名摘出来(也就是分组)
使用https://regexr.com/网站中的替...
"$1"代表第一组(李栓蛋) "$2"代表第二组(王花花)
这样看来 想替换两名字的位置就简单极了
so easy 一次性将两个句子都替换了
这就是分组的强大之处:可以将我们指定的组暂时缓存,用序号表示,也可以命名(JS暂时不支持命名) 15.分组匹配但不捕获
前4个为移动号码 第5个为联通号码 最后一个为电信号码 首先我们在乎的是前三位(一个号段) 然后是中间四位(我们并不在乎它们是什么) 最后是我们想要获取的四位(由于是我们最后想要获取的 所以我们用括号括起来 说明它是一个组)
然后通过看号段 将其它号码排除在外 也就是说 我们只匹配137138182183这四种号段的电话号码 可以使用以下写法
现在我们既匹配了所有移动号码 又获取到了他们的后四位
此时我们只用到了第2组,也就是说我们的第一组是浪费的。我们只是想用这种方式匹配它而并不想要获取。有没有这种操作呢?当然有。
这样一来就不浪费了~ 16.正向预查
前面是货币值,后面是货币单位。 当我们需要匹配单位时
但我们现在的任务是 只获取数字 不包括单位 此时就需要用到正向预查
它的含义就是 前面是我们要匹配的东西 后面一定是等号后面的东西 但是不匹配它 (?!模式) 正向否定预查
我们希望匹配100刀和100磅 但是匹配结果和我们预想不同 这就需要我们注意 当使用反向预查时 我们后面要将前面匹配的类型排除在外。
这就成功匹配了。 17.反向预查 我们的任务是 匹配所有人民币的数额
(?<=模式) 反向肯定预查
注意:JS引擎不支持反向预查 右上角切换一个更加完善的引擎即可~ 与之相反的是反向否定预查 (?<!模式) 反向否定预查
我们发现 跟之前出现了同样的问题 同理前面所说 应用反向预查时要将后面匹配的类型排除在外
这样就可以匹配到非人民币的货币数额~非常强大! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |