本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
你会用js的正则吗,如果你知道正则语法但是不知道如何下手一定要来看看。
你一定是没有分清楚自己写正则的场景,本文让你学会如何开始使用正则。
注意,本文并非正则语法教学。
场景
有时候写正则时很混乱可能是没有分清楚自己写正则的场景。
一般js使用正则,两个场景:
-
需要知道某一个字符串是否达到我们需要的形式。(
我们关心的是字符串
) -
需要获取某一个字符串中匹配到的内容,或者是否匹配到内容。(
我们关心的是正则内容
)
解决方式:
-
第一个场景使用exp.test(str)
-
第二个场景使用str.match(exp)
test
记住一点,test在匹配时我们需要对一整个字符串进行匹配,所以在写正则时形式一定是有头有尾/^...$/
。
例子:检测字符串是不是纯数字
错误
//正则没有头尾,我们发现只要是字符串存在数字它就返回true,目的就变成检测是否含有数字了,成了场景2
const exp = /\d+/;
console.log(exp.test('aaa123'))//true
console.log(exp.test('123'))//true
正确
const exp = /^\d+$/;
console.log(exp.test('aaa123'))//false
console.log(exp.test('123'))//true
match
match来判断是否存在我们要的内容。
例子:获取字符串中的数字。
错误
const exp = /\d+/;
console.log(Boolean('123aa56'.match(exp)), '123aa56'.match(exp))
结果:我们发现我们检测是对了,但是没有匹配到56
正确
const exp = /\d+/g;
console.log(Boolean('123aa56'.match(exp)), '123aa56'.match(exp))
结果:加上/g
就会找到所有匹配上的内容了
小贴士
零宽断言
另外,零宽断言也在匹配中很常用,比如匹配小数点后的数字,你需要用到小数点来查,但是你不需要获取小数点,/(?<=\.)(\d+)/g
。
匹配中文
汉字的正则表示
[\u4e00-\u9fa5]
匹配一段字符串中的文字部分
const str = "dshjadbkj第一段文字5542、、???//第二段文字/!!!!这三段文字126655****-";
console.log(str.match(/[\u4e00-\u9fa5]+/g));//['第一段文字', '第二段文字', '这三段文字']
尾言
如果觉得文章还不错的话,欢迎点赞收藏哦,有什么错误或者意见建议也可以留言,感谢~