什么是正则表达式呢?

为了字符串模式匹配,从而实现搜索和替换功能。从命名可以了解到,它是一种用来描述规则的表达式。大家可以利用regexper.com这个工具很好地可视化自己写的正则表达式: 

vue  校验

可能是最好的正则表达式的教程笔记了吧... - 掘金

01、正则表达式(菜鸟教程)_bigdata_pokison的博客-CSDN博客_菜鸟教程 正则

https://vizztop.github.io/awesome-regex/dist/#/

 元字符:

\d匹配数字
\D非数字
\w匹配字母或数字或下划线或汉字[0-9a-zA-Z_]
\W匹配非英文数字下划线的任意字符[^0-9a-zA-Z_]
\s匹配空格,tab等[\t\v\n\r\f]
\S匹配非空格,tab等[^\t\v\n\r\f]
.匹配除换行符以外的任意字符
^匹配字符串的开始
$匹配字符串的结束
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 和和。
+匹配前面的子表达式一次或多次。要匹配+字符,请使用\+
|指明两项之间的一个选择。要匹配 |,请使用 \|
\b

单词的边界,具体讲有三点规则。

① \w和\W之间的位置

② ^与\w之间的位置

③ \w与$之间的位置

\B

非单词的边界,也就是\b反着来

① \w与\w之间的位置

② \W与\W之间的位置

③^与\W之间的位置

④\W与$之间的位置

[]匹配括号内的任意字符
[0-9]匹配数字,等价于\d
[A-Za-z]匹配英文字母
[\u4e00-\u9fa5]匹配汉字
[^]匹配除^号后字符以外的任意字符
[^abc]匹配除了abc以外的任意字符

练习题:

匹配有abc开头的字符串:

\babc或者^abc

 匹配8位数字的QQ号码

^\d\d\d\d\d\d\d\d$

匹配1开头11位数字的手机号码

^1\d\d\d\d\d\d\d\d\d\d$

xxx_love_study_1.mp4,想要把他变成❤️xxx_love_study_1❤️.❤️mp4❤️怎么搞呢?

'xxx_love_study_1.mp4'.replace(/\b/g, '❤️') // ❤️xxx_love_study_1❤️.❤️mp4❤️

 重复限定符

*重复零次或更多次
+重复一次或更多次
重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

练习题:

匹配8位数字的QQ号码

^\d{8}$

匹配1开头11位数字的手机号

^1\d{10}$

匹配银行卡号14-18位的数字

^\d{14,18}$

匹配以a开头的,0个或多个b结尾的字符串

^ab*$

分组

从上面的例子(4)中看到,*限定符是作用与他左边最近的一个字符,现在的问题如果想要ab同时被*限定怎么办呢?

如果要匹配的字符串中本身就包含小括号,那是不是冲突?应该怎么办?

针对这种情况,正则提供了转义的方式,也就是要把这些元字符,限定符或者关键字转义成普通的字符,做法很简单,就是在要转义的字符前加“\”

如,要匹配(ab)开头

^(\(ab\))*

条件或(|)

查找联通的号码

^(130|131|132|155|156|185|186|145|176)\d{8}$

区间

通过上面的例子,是否还能简化呢

正则提供了一个元字符中括号[]来表示区间的条件

  • 限定0到9,可以写成[0-9]
  • 限定A-Z,可以写成[A-Z]
  • 限定某些数字[165]

优化后

^((13[0-2])|(15[56])|(18[5-6])|145|176)\d{8}$
(?=abc)匹配abc前面的字符
(?<=abc)匹配abc后面的字符
(?<!abc)匹配前面不是abc的字符
(?!abc)匹配后面不是abc的字符

flag 

g全部的,给我匹配全部的
i忽略大小写
m多行匹配

匹配非法字符:  /[@#\$%\^&\*\s+]+/g

关键字中含有特殊字符:/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g

\s表示空白字符。包括,空格,制表符等

""只表示空格

\s+ 可匹配至少一个空白字符

[ ]+ 只表示多个空格

匹配中文:  /[\u4e00-\u9fa5]+/g

匹配邮箱: /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/

匹配电话号码,包括固定电话与手机号码: /(^0\d{2,3}-\d{7,8}(-\d{1,6})?$)|(^0?1[34578]\d{9}$)/

1- 999999999999的数字:/^[1-9]{1}\d{0,11}$/

1-100的数字:/^([1-9]{1,2}|100)$/

身份证号:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

8-20位字母,数字和特殊字符:/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{8,20}$/
6-20位字母和数字 :/^(?=.*\d)(?=.*[a-z])[a-zA-Z\d]{6,20}$/
14位,最多10位整数,4位小数:/^[1-9]\d{0,9}(\.\d{1,4})?$|^0(\.\d{1,4})?$/

营业执照号:/(^(?:(?![IOZSV])[\dA-Z]){2}\d{6}(?:(?![IOZSV])[\dA-Z]){10}$)|(^\d{15}$)/

/^[0-9]*$/

手机号正则,座机号正则,400开头的正则

/(^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$)|(^((\(\d{3}\))|(\d{3}\-))?(1[3578]\d{9})$)|(^(400)-(\d{3})-(\d{4})(.)(\d{1,4})$)|(^(400)-(\d{3})-(\d{4}$))/

if ( reg.test(gets) ){

   alert('匹配成功');

  }else{

   alert('匹配失败');

 }

0-9范围内0到多个数字的组合,且字符开头结尾都是0-9的数字。即表示整数。如 1314、0

/^\d{m,n}$/

匹配m-n位的数字。由于开头结尾都是数字,所以它是一个固定长度的纯数字。

/^\-[1-9][0-9]*$/

匹配-开头,数字结尾,第一个字符为1-9,随后0-n个字符为0-9的字符。即非零负整数。

/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

这是匹配邮件的一个正则,我们一点点看。 

正则表达式用法

/正则表达式特殊字符/修饰符(可选)

特殊字符

这里列一下正则的特殊字符及其用法,加深理解和映象。 

* \ 将字符变为特殊或非特殊字符。如 n 变为换行符 \n,特殊符号 ( 变为字符 \(。 

* ^ 匹配字符串起始位置。 

* $ 匹配字符串结束位置。 

* * 匹配前面的子表达式零到多次。 

* + 匹配前面的子表达式一到多次。 

* ? 匹配前面的子表达式零到一次。 

* {n} 匹配前面的子表达式的n个,如 o{2} 能够匹配 food 不能匹配 god。 

* {n,} 至少匹配n个前面的子表达式,如 o{2,} 能够匹配 fooooood 不能匹配 god。 

* {n, m} 至少匹配n次,至多匹配m次。 

* 非贪婪模式 默认为贪婪模式,如 o+ 将匹配 foooood 的所有 o。而非贪婪模式(在匹配符后面加 ?),如 o+? 则只会匹配一个o 

* . 匹配除换行符外任何单个字符。换行符为 \n 和 \r。 

* (x) 捕获括号,匹配并记住匹配项。 

* (?:x) 非捕获括号,匹配并不记住匹配项。如 /(?:foo){1,2}/,这里将 foo 作为一个整体进行匹配1到2次。 

* x(?=y) 匹配x仅仅在x后面跟y的时候。?=y 表示字符串末尾是y。 

* x(?!y) 匹配x仅仅在x后面不跟着y的时候。?!y 表示字符串末尾不是y。 

* x|y 匹配 x 或 y,如 jack|rose 就可以匹配到 jack 和 rose 两个字符串。 

* [xyz] 匹配方括号内任意字符。 

* [^xyz] 反向字符集,匹配除方括号内字符的任意字符。 

* [0-9] 范围匹配,匹配0-9范围内任意字符。 

* \w 查找单词字符。单词字符包括:a-z、A-Z、0-9,以及下划线。 

* \W 查找非单词字符。 

* \d 查找数字字符。 

* \D 查找非数字字符。 

* \s 查找空白字符。空白字符包括空格、\n、\f、\r、\t、\v。 

* \S 查找非空白字符。 

* \b 匹配单词边界,通常匹配单词开头和结尾。如 /\bcd/ 匹配 cdkey。 

* \B 匹配非单词边界。如 /\Bcd/ 匹配 abcd。 

* \O 查找 NULL 字符。 

* \n 换行符。 

* \f 换页符。 

* \r 回车符。 

* \t 制表符。 

* \v 垂直制表符。

修饰符

i 执行对大小写不敏感的匹配。

g 执行全局匹配。

m 执行多行匹配。

Logo

前往低代码交流专区

更多推荐