// 双斜杠 --- 判断字符串中是否有字符能匹配 good
const reg1 = /good/
// regular expression 简写
// 实例化对象
const reg2 = new RegExp('good')
console.log(reg1,reg2);
// /good/ /good/
// 构造函数的第一个参数表示匹配的字符,第二个参数表示修饰符
const reg3 = new RegExp('tmd','gi')
const str = 'hello tmd hei Tmd tmd'
// replace 默认只会替换第一个
console.log(str.replace('tmd','**'));
console.log(str.replace(/tmd/ig,'**'));
console.log(str.replace(reg3,'**'));
const reg = /tmd/ig const str = 'hello tmd Tmd' // test正则的方法 测试字符串中是否有匹配正则的内容 -- 布尔值 一般次正则不需要全局匹配 console.log(reg.test(str)); // true / // 返回的是一个数组 --- 总是匹配一个,如果匹配不到就返回null console.log(reg.exec(str)); // ['Tmd', index: 10, input: 'hello tmd Tmd', groups: undefined]
正则的语法
| 或者
[] 或者(区间) [0-9] [1-9] [a-z] [A-Z] [0-9a-zA-Z]
空格也会被匹配 --- 一般正则不写空格
正则的元字符
次数匹配
* 0次或者多次 {0,}
? 0次或者1次 {0,1}
+ 1次或者多次 {1,}
{m,n} m次到n次
{m,} 至少m次
{m} m次
^ 以...开头
$ 以...结尾
^ $ 同时使用可以把正则规定死
. 匹配任意字符
// 匹配 \/ const reg = /\ \// console.log(reg.test(' \/')); // 匹配 . const reg2 = /\./ // 匹配[ const reg3 = /\[/ console.log(reg3.test('[]]')); // true console.log(reg2.test('hq')); // false // + ? * {} 匹配的次数,需要前面有匹配的东西 // const reg4 = /+/ // 报错 /+/: Nothing to repeat const reg4 = /\+/ console.log(reg4.test('+')); // true
\d 数字
\D 非数字
\w 数字,字母,下划线 [0-9a-zA-Z_]
\W 非数字,字母,下划线
\s 匹配空白字符
\S 匹配非空白字符
空白字符和空字符不一样
空字符 .{0}
中文匹配
[\u4e00-\u9fa5]
const reg = /^[\u4e00-\u9fa5]{3,6}$/ console.log(reg.test('你好啊')); // true
charAt() 访问角标对应的值
charCodeAt() 访问角标对应的值的ASCII值
String.fromCharCode() 把ASCII值转成对应的字符
includes() 判断数组中是否存在某个值
indexOf() 判断数组中是否存在某个值,返回第一次出现的下标,找不到就
返回-1
lastIndexOf() 判断数组中是否存在某个值,返回最后一次出现的下标
slice(i,i) 截取数组中的部分值,返回一个新的数组
substring(i,i) //截取(1,2)角标 第2个到第3个
substr(i,数量) // (2,2) 第2个开始截2个
toUpperCase()大写 toLowerCase()小写
concat() + 拼接数组,返回一个新的数组
split() 把字符串切割成数组
replace(old,new) 替换(默认只会替换第一个)
trim() 去掉首尾的空格
能接受正则的方法
replace(要查找的,替换的) 默认只会替换一次,因此需要正则
search() 一般和indexOf是一样的,但是search还可以接受正则
match() 找到满足条件的字符,默认只会找到第一个,全局匹配才能找到所有的,如果找不到就返回null
split() 把字符串切割成数组,也可以接受正则的写法
// 替换敏感词 function replaceMinGan(str,arr,n){ n = n || '**'; // const mgc = ['tmd','md','wc']; const word = arr.join('|'); const reg = new RegExp(word,'ig') return str.replace(reg,n) } const mgc = ['tmd','md','wc'] const res = replaceMinGan('wc,正则真tmd简单啊,Wc',mgc) console.log(res); // **,正则真**简单啊,**
const str2 = 'good day day up' console.log(str2.search('day')); // 5 search = indexOf console.log(str2.search(/da*y/gi)); // 5 search 可以使用正则,但是indexOf不能使用正则 console.log(str2.match(/da*y/gi)); // 找到满足条件的字符 ['day', 'day']
const str3 = 'good good study day day up' // 贪婪匹配 console.log(str3.split(/ +/)); // ['good', 'good', 'study', 'day', 'day', 'up']
// 邮箱 123@qq.com 123@qq.cn 123@qq.com.cn
// 必须有@,@前面必须有内容,.com或者.cn或者.com.cn结尾
const reg = /^[\w,\+]+@\w+\.(com|cn|com\.cn)$/ console.log(reg.test('1,+23@q.com.cn')); // true
// 身份证号 18位 17位数字+数字或者X
// 身份证 6位 4位出生年份 2月份 2日期 3数字 ,数字或者X
// 身份证号 18位 17位数字+数字或者X const reg2 = /^\d{17}[\dX]$/ console.log(reg2.test('22222219990929191X')); // true // 身份证 6位 4位出生年份 2月份 2日期 3数字 ,数字或者X const reg3=/^\d{6}(19|20)\d{2}(0|1)\d(0|1|2|3)\d{4}[\dX]$/ console.log(reg3.test('22222219991929191X')); // true
// 删除所有的空格
// 删除所有的空格 const str = ' good good study day day up ' // const arr = ['',' ',' '] ... // 替换 console.log(str.replace(/ +/g,'')); // goodgoodstudydaydayup 替换成空 就相当于把它删了
// 删除首尾空格
console.log(str); console.log(str.replace(/^ +| +$/g,'')); // good good study day day up
// 删除多余的空格
console.log(str.replace(/ +/g,' ')); // good good study day day up