用户:
PlumSteven查看:1 回复:6 评论:1 创建时间:2023-01-12T22:45:21
众所周知啊,BOX的代码编辑器里面有很多颜色
有关键字的蓝色,数字的淡绿色,标识符的白色
还有这个。。。神秘的紫色:
/123456789/
那这个是啥勒?大家猜一猜
注释?数字?
都不是!这个是正则表达式!
有些人可能会问:哎不是,正则表达式是什么东西啊?
就是这个东西(网上随便找的一段):
/^[a-z]*[^\d]{1,10}?(aaa|bbb)(?:ccc)$/
好家伙,是不是直接看不懂了?没错,这就是正则的一大特点:没学过的完全看不懂!
那我们就踏上旅程,开始探索正则的世界吧!
一、初识正则
假设你接到了一个任务,让你用JS写一段代码,判断输入字符串是不是一个电话号码,如果是,输出yes,反之,输出no
你会咋办?狂写一堆if?(你们可以去自己试试)
注意哦,手机号有这几个特征:
第一位肯定是1
第二位大多数是3, 5, 6, 8(暂时我们先写这几个,应该还有其他的)
其他位肯定是一个数字
位数肯定是11位
写完这么多if之后,是不是感觉手要麻了,那用正则咋写嘞?
var regex = /1[3568]\d{9}/
啊没错就是这么简单,我们来测试一下:
//注:这里输出的是匹配到的字符串并没有输出yes和no
var regex = /1[3568]\d{9}/
var phone1 = "13123123" //应该是错误的,输出null
var phone2 = "13123456789" //应该是正确的,输出13123456789
var ans1 = phone1.match(regex)
var ans2 = phone2.match(regex)
world.say(ans1)
world.say(ans2)
是不是很简单?我们来看一下这个正则表达式
/1[3568]\d{9}/
首先呢,两个/不用多说吧,就是表示这里面的东西是个正则表达式
基础知识:
单一字符:写啥匹配啥
比如
/abc/ 就能匹配abc
/asdf/ 就能匹配asdf
以此类推
中括号:里面有啥都可以
如:
/[abcd]/ 意思就是第一个字符你可以是a可以是b可以是c可以是d
/[ab][cd]/ 这个意思呢就是第一个字符可以是a或者b,第二个字符可以是c或者d
也就是中括号里有啥,他就能匹配啥
这两个就是正则最基础的知识啦,来个小练习吧
答题:/a[cd][acd]b/的意思是什么
二、深入正则
上面我们学习了单一字符匹配和万能的中括号
但是有同学就要问了,哎呀我想匹配abcdefg等等所有字符,难道要一个个打出来吗?
当然不用啦,正则怎么可能这么无情
接下来呢,我们就要开始学习一些转义字符
上面的我们基本不用看,平常不会用到,我们重点看\w到\D部分,这些就是我们最常用的东西啦!
正如大家所见,\d可以匹配数字字符,比如/\d/就可以匹配第一个字符是0123456789的字符串
而\D呢,就是匹配非数字字符,也就是说/\D/可以匹配第一个字符不是0123456789的字符串
这不就是变成大写意思反过来吗?
\w,\s,\b也就同理啦,大家可以自行去看,这里不多赘述
量词
什么?正则也有量词?
没错,就是我们平常说的“三个苹果“中的”个“
正则里面的量词有一堆,我们先学习这个
大括号——重复匹配多次
这个很好理解,比如/a{3}/就可以匹配aaa,因为大括号里是三,重复匹配三次吗
而{m,n}这种写法呢,就是匹配m~n次(优先n次,这个不用多管),比如/a{1,3}/就可以匹配一个a,两个a或者3个a(即a, aa, aaa)
还有一个{m,},即匹配m~∞次(优先∞次),/a{1,}/就可以匹配a,aa,aaa,aaaa,aaaaa,aaaaaa......
问号:是或者不是
问好也就是匹配一次或者不匹配,或者说0次,优先匹配1次,相当于是{0,1}
/ab?/就可以匹配a或者ab
然后他加在大括号后面可以开启非贪婪模式,即优先匹配小的数字
加号和星号:一堆好兄弟
这俩玩意完全就是{}的简便写法
+表示{1,}
*表示{0,}
这就是量词啦
运算符(我自己取的名字)
^ :可以表示一个正则表达式的开始(当然也可以不写,但你写了最好得在后面加个$,表示结束)
也可以表示非(比如[^abc]表示匹配除了abc之外的所有字符
| :表示或者
比如abc|efg可以匹配abc或者efg
三、giao级方法
分组
说难听点就是运算优先级,和Python一样
比如abc{2}本来可以匹配abcc,但是如果加上圆括号
(abc){2},就表示abc是个整体,要匹配abcabc
注:不能在中括号中使用
最后说说JS里面怎么用吧
平常我们都会用 字符串.match()方法
注意了,match表示匹配,/asdf/是可以匹配asdff的,因为asdff里面有一个asdf
还有search和replace方法,大家自行去了解吧
撒花撒花,本教程就到这里啦!拜拜
PlumSteven注意了注意了
补充几个点
中括号里面不仅仅可以写\w,如果你想要用a-c,1-6这种区间范围的话,可以用[a-c],[1-6],以此类推
然后关于转义字符,有人问我怎么匹配操作符(比如括号啊,加号啊等等)
只需要用反斜杠\加上你想匹配的字符(比如\+,\*,\(等)就可以啦
$, (, ), *, +, ., [, ], ?, \, ^, {, }, |, -好像都需要转义
点赞0
评论