- 个人觉得,比较齐全的学习正则:c.biancheng.net/view/9359.h…,下面做一些梳理。
- 本章的内容主要介绍js正则的相关方法,具体正则的编写-----后面补吧(主要是不是很会)。
- 倒是可以推荐一个(写的挺细的,后面一些部分,我的确是没看懂):正则表达式不要背
- 方法可能不够齐全,后面可补!各位大佬们可以提出来,我补,谢谢!
RegExp对象
-
最简单的RegExp对象的案例(匹配全局数字):
/\d/g -
RegExp对象提供的一些方法来执行正则表达式(列举比较常用的)
-
exec():- 在字符串搜索匹配项,并返回一个数组,若没有匹配则返回null。(只会匹配返回一个,我还认为会返回所有呐,再见,返回所有的在下面有)
// 案例 let str='test66t6s' let reg=/\d/g reg.exec(str) // 输出的结果:['1', index: 4, input: 'test66t6s', groups: undefined] -
test():- 测试字符串是否与正则表达式匹配,匹配则返回true,不匹配返回false
// 案例 let str='test66t6s' let reg=/\d/g reg.test(str) // 输出的结果:true -
toString():- 返回表示指定对象的字符串
// 案例 let str='test66t6s' let reg=/\d/g reg.toString(str) // 输出的结果:'/\d/g'
-
String对象正则常用的几个方法
string对象的方法,那么正则表达式,当然就是当参数的份儿咯;下列案例中,案例一匹配全局,案例二不匹配全局。
-
serarch():- 返回的匹配到的第一个符合规则的字符串的首个字符的下标
// 案例一 let str='test66t6s' let reg=/\d/g str.serarch(reg) // 输出的结果:4 // 案例二 let str1='test66t6s' let reg1=/st6/ str1.search(reg1) // 输出的结果:2 -
match():match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。- 该方法类似
indexOf()和lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
// 案例一 let str='test66t6s' let reg=/\d/g str.match(reg) // 输出结果:(3) ['6', '6', '6'] // 案例二 let str1='test66t6s' let reg1=/\d/ str1.match(reg1) // 输出结果:['6', index: 4, input: 'test66t6s', groups: undefined] // 咳咳,和RegExp对象提供的exec方法,输出结果一样 -
matchAll()- 返回的是一个迭代器,可以使用for...of..,或者数组的扩展运算符(...)或者Array.form()实现展示和相关功能
- 如果未展开,则输出就是:
RegExpStringIterator {} - 必须是全局的正则,否则报错
// 案例一 let str='test66t6s' let reg=/\d/g str.matchAll(reg) // 输出结果:RegExpStringIterator {} console.log(...str.matchAll(reg)) /* 输出结果: ['6', index: 4, input: 'test66t6s', groups: undefined] ['6', index: 5, input: 'test66t6s', groups: undefined] ['6', index: 7, input: 'test66t6s', groups: undefined] */ // 案例二 let str1='test66t6s' let reg1=/\d str1.matchAll(reg1) // 输出报错:Uncaught TypeError: String.prototype.matchAll called with a non-global RegExp argument -
replace():- 将匹配到的字符串进行替换,符合正则表达式规则,没有写匹配全局使只替换匹配到符合规则的第一个
// 案例一 let str='test66t6s' let reg=/\d/g str.replace(reg,9) // 输出的结果:'test99t9s' // 案例二 let str1='test66t6s' let reg1=/\d/ str1.replace(reg1,9) // 输出的结果:'test96t6s' -
replaceAll():- 必须是全局的正则,否则报错
// 案例一 let str='test66t6s' let reg=/\d/g str.replaceAll(reg,9) // 输出的结果:'test99t9s' // 案例二 let str1='test66t6s' let reg1=/\d/ str1.replaceAll(reg1,9) // 输出的报错:Uncaught TypeError: String.prototype.replaceAll called with a non-global RegExp argument -
split()- 不管是不是全局正则,只要匹配到符合正则规则的所有字符串,全部进行剪切操作,有别与replace和match,没有对应的All方法。
// 案例一 let str='test66t6s' let reg=/\d/g str.split(reg) // 输出结果:(4) ['test', '', 't', 's'] // 案例二 let str1='test66t6s' let reg1=/\d/g str1.split(reg1) // 输出结果:(4) ['test', '', 't', 's']