js正则表达式笔记

1、字符匹配

代码演示

// 模板:{m,n}表示最少连续出现m次,最多连续出现n次(特别注意,是连续出现)
        var regex=/ab{2,5}c/g;
        // 表示a和c之间b最少连续出现2次,最多连续出现五次
        var str='abc,abbc,abbbc,abbbbc,abbbbbc,abbbbbbbc'
        console.log(str.match(regex))
        // 输出["abbc", "abbbc", "abbbbc", "abbbbbc"]

在这里插入图片描述

1.2字符组
// 模板:[abc]表示该字符可以是 a, b, c中的任何一个
        var regex=/a[123]c/g;
        // // 表示 a 和 c 中间的字符可以是 1, 2, 3
        var str='a0c,a1c,a2c,a3c,a4c,a5c';
        console.log(str.match(regex))
        // 输出["a1c", "a2c", "a3c"]

在这里插入图片描述

1.3范围表达法
如果字符组中的字符特别多(即要匹配的字符有很多可能性),可用范围表示
// 模板:[123456abcdefGHIJKLM]可以写成[1-6a-fG-M](注意:使用范围表示法的前提是属于范围的字符需要时连续的, 12456就不能写成1-6,因为缺3)
        var regex=/a[1-3f-zM-O]2/g;
        // 表示a和2之间,只能出现数字1-3小写字母f-z大写字母M-O的值
        var str='absa22,cag2m,daN2';
        console.log(str.match(regex))
        // 输出0: "a22" 1: "ag2" 2: "aN2"
//特殊情况:如果需要匹配 '-' ,'a', 'z'中任意一个,要么改顺序[-az]或[az-],要么转义[a\-z],总之不能让引擎识别成范围表示

在这里插入图片描述

1.4排除字符组
[abc],表示匹配的只以为字符可以是除了a,b,c的任一个。(脱字符)表示求反
var regex=/a[^abc]3/g;
        // 表示表示匹配的只以为字符可以是除了a,b,c的任一个
        var str='bcaa3,ba63c,cda443,daG3M';
        console.log(str.match(regex))

在这里插入图片描述

2、常见的字符组简写形式

字符含义
.匹配除了换行符以外的任意字符。
\s代表任意空白符(换行符,制表符,空格)
\S匹配任意非空字符串
\b匹配单词边界,匹配单词的开头和结尾。
\B匹配一个非单词边界
\d匹配一个数字,等价于[0-9]
\D匹配一个非数字,等价于[^0-9]
\w匹配一个单字字符(字母、数字或者下划线)等价于[A-Za-z0-9_],例如, /\w/ 匹配 “apple,” 中的 ‘a’,"$5.28,"中的 ‘5’ 和 “3D.” 中的 ‘3’。 \W匹配一个非单字字符。等价于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 “50%.” 中的 ‘%’。
\W匹配一个非单字字符。等价于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 “50%.” 中的 ‘%’。
^匹配字符串的开始用在[]括号里面表示排除,/^A/ 并不会匹配 “an A” 中的 ‘A’,但是会匹配 “An E” 中的 ‘A’。
$匹配字符串的结束。例如,/tKaTeX parse error: Undefined control sequence: \d at position 66: …位到12位数字时,可以使用:^\̲d̲{5,12}

3、分组符([],(),{});

字符含义
()如果想要重复多个字符该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。eg: (\d{1,3}.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。
[]代表一个字符集合。匹配方括号的中任意字符,包括转义序列。你可以使用破折号(-)来指定一个字符范围。对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的。例如,[abcd] 和[a-d]是一样的。他们都匹配"brisket"中得‘b’,也都匹配“city”中的‘c’。/[a-z.]+/ 和/[\w.]+/都匹配“test.i.ng”中得所有字符。
{}表示量词的范围的。

4、修饰符(i,g,m);

字符含义
i忽略大小写
g执行全局匹配
m执行多行匹配

5、量词(*,?,+,-,{n,m},?=n,?!=n);

字符含义
*匹配任意次,.*连在一起就意味着任意数量的不包含换行的字符。等价于{0,}
+匹配前面一个表达式1次或者多次。等价于 {1,}。
?匹配前面一个表达式0次或者1次。等价于 {0,1}。
{n,m}匹配n到m次
x(?=y)匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。 例如,/Jack(?=Sprat)/会匹配到’Jack’仅仅当它后面跟着’Sprat’。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着’Sprat’或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。
x(?!y)匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。 例如,/\d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!.)/.exec(“3.141”)匹配‘141’但是不是‘3.141’

3、一些常见的正则验证

验证邮箱

/^([a-z0-9_\.-]+)@([a-z0-9\.-]+)\.([a-z\.]{2,6})$/

验证手机号

/^[1][3,4,5,7,8][0-9]{9}$/

验证IP地址

/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/

验证用户名(3-16位的字母或数字或下划线横线)

/^[A-Za-z0-9_-]{3,16}$/

验证密码(包含大写字母,小写字母,数字,特殊字符,长度为6-18位)

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{6,18}$/

只允许输入中文

let str = '发狂的桔子'
let str2 = '你好hello'
let reg = /^[\u2E80-\u9FFF]+$/
console.log(reg.test(str));     //true
console.log(reg.test(str2));    //false
12345

只匹配中文

let s = 'Hello123.程序员!'
// console.log(s.match(/\p{L}+/gu));   //只匹配非标点符号, 输出:[ 'Hello', '程序员' ]
// console.log(s.match(/\p{P}/gu));    //只匹配标点符号, 输出:[ '.', '!' ]
console.log(s.match(/\p{sc=Han}+/gu));  //只匹配中文, 输出:[ '程序员' ]
1234

隐藏部分字符:

let tel = '123456789'
let reg = /(?<=\d{5})\d{4}/
tel = tel.replace(reg, v => '*'.repeat(4) )
console.log(tel);   // 12345****
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值