正则是用于匹配字符串中字符组合的模式,在js中,正则也是对象。
定义正则的两种方式:
1.const 变量名=new RegExp(/表达式/)
<script>const req = new RegExp(/a/)console.log(req.test("asd"))//true</script>
2.const 变量名=/表达式/
const req = /前端/console.log(req.test("学习前端"))//true
test()是正则对象方法,用于检测字符串是否符合正则规范,该对象会返回true或false,其()内是想要测试的参数
3.边界符^ $,前者代表开始,后者代表结束
<script>//^代表以a开头const req = /^a/console.log(req.test("a"));//trueconsole.log(req.test("abc"));//trueconsole.log(req.test("bac"));//false//$代表以a结尾const req1 = /a$/console.log(req1.test("a"));//trueconsole.log(req1.test("bca"));//trueconsole.log(req1.test("bac"));//false// 正则不需要加引号,无论数字或字符,^ $这样写代表精确匹配,必须是abc才符合规范,否则为falseconst req = /^abc$/console.log(req.test("abc"));//trueconsole.log(req.test("abcd"));//falseconsole.log(req.test("aabcd"));//false//单词边界,找出某句话的某个单词,例如:The cat scattered his food all over the room.想找到cat这个单词,但是如果只是使用/cat/这个正则,就会同时匹配到cat和scattered这两处文本,这时候就可以用到单词边界\b,他其实匹配的是能构成单词的字符(\w)和不能构成单词的字符(\W)中间的那个位置,也就是cat前后空隙.const req = /\bcat\b/gconst str = 'The cat scattered his food all over the room'console.log(str.replace(req, 'dog'));//The dog scattered his food all over the room</script>
4.i:匹配大小写
<script>// i:忽略大小写const req = /a/iconsole.log(req.test("a"));//trueconsole.log(req.test("abc"));//trueconsole.log(req.test("ABC"));//true</script>
5.g:全局匹配
<script>const req = /js/const str = '学js,找js工作,成js大神'console.log(str.replace(req, "前端"));//学前端,找js工作,成js大神const req1 = /js/gconst str1 = '学js,找js工作,成js大神'console.log(str1.replace(req1, "前端"));//学前端,找前端工作,成前端大神</script>
6.字符类[]
[]:表示有一系列字符可供选择,只要匹配其中一个就可以了
^:取反,注意要写到[]里
.:匹配的是除换行符之外的任意字符,''特殊也为false
<script>//1.只要匹配一个就符合规则const req = /[abc]/console.log(req.test("abcd"));//trueconsole.log(req.test("andy"));//true//2.三选一,不含其他元素const req1 = /^[abc]$/console.log(req1.test("abc"));//falseconsole.log(req1.test("andy"));//falseconsole.log(req1.test("a"));//true//[]的^表示全取反,就是取abc之外的const req = /[^abc]/console.log(req.test("a"));//falseconsole.log(req.test("d"));//true//.匹配的是除换行符之外的任意字符,''特殊也为falseconst req = /./console.log(req.test(''));//falseconsole.log(req.test("1"));//trueconsole.log(req.test("aaa"));//trueconsole.log(req.test("\n"));//falseconsole.log(req.test("\r"));//false</script>
7.量词符
<script>//*号使用const req = /^a*$/console.log(req.test(""));//trueconsole.log(req.test("a"));//trueconsole.log(req.test("aaaa"));//true//+号使用const req1 = /^a+$/console.log(req1.test(""));//falseconsole.log(req1.test("a"));//trueconsole.log(req1.test("aaaa"));//true//?号使用const req3 = /^a?$/console.log(req3.test(""));//trueconsole.log(req3.test("a"));//trueconsole.log(req3.test("aaaa"));//false//{n}使用const req4 = /^a{3}$/console.log(req4.test("aaa"));//trueconsole.log(req4.test("aaaa"));//false//{n,}使用const req5 = /^a{3,}$/console.log(req5.test("aaa"));//trueconsole.log(req5.test("aaaa"));//true//{n,m}使用const req6 = /^a{3,5}$/console.log(req6.test("aaa"));//trueconsole.log(req6.test("aaaa"));//trueconsole.log(req6.test("aaaaa"));//trueconsole.log(req6.test("aaaaaa"));//false
</script>
8.预定义类(简便写法,不做赘述)
9.分组及分组捕获、分支结构
//分组let req = /(ab)+/ //匹配ab类型的console.log(req.test('ab'));//trueconsole.log(req.test('abab'));//true//分组捕获 例如将YYYY-MM-DD格式替换为MM/DD/YYYY,使用()将\d{4}等分组let req1 = /^(\d{4})-(\d{2})-(\d{2})$/let date = '2024-02-25'console.log(req1.test(date)); //true//如何获取分组对应内容,使用$,$1代表第一块内容YYYYconsole.log(date.replace(req1, '$2/$3/$1'));//02/25/2024//分支结构let str = '学前端内容'let str1 = '学后端知识'let str2 = '学正则方法'let req3 = /前端|正则/console.log(req3.test(str));//trueconsole.log(req3.test(str1));//falseconsole.log(req3.test(str2));//true