正则表达式
正则表达式: 是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象, 通常用来查找,替换那些符合正则的文本,许多语言都支持正则表达式
语法规范: 1.定义规则: 2.根据规则去查找
语法: const 变量名 = /表达式/
其中/ /是正则表达式的字面量
<script>
const str = '有前端吗,有前端就返回,没有前端就退出'
// 1.定义规则
const reg = /前端/ //不能有空格,不然就是false
// 判断是否有符合规则的字符串
// 语法: text()方法 返回的是一个布尔值
const i = reg.test(str)
console.log(i); //true
// 查找符合规则的字符串
// 语法: exec()方法 返回的是一个数组 否则就是null
const j = reg.exec(str)
console.log(j);
</script>
元字符
-
普通字符: 大多数字符仅能描述他们本身,这些字符被称作为普通字符,比如所以的字母和数字.也就是说普通字符只能够匹配字符串中与他们相同的字符.
-
元字符(特殊字符): 是具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能.
1.比如规定用户只能输入英文26个字母.普通字符的话abcdef.....
2.但是换成元字符写法:[a-z]
元字符分类
边界符号
边界符号: 表示位置,开头和结尾,必须用什么开头,用什么结尾
语法:
//^ 表示匹配行首的文本(以谁开始)
console.log(/^abc/.test('a123')); //false
console.log(/^abc/.test('abc')); //true
console.log(/^abc/.test('ABCabc')); //false
//$ 表示匹配行尾的文本(以谁结束)
console.log(/abc$/.test('abc')); //true
console.log(/abc$/.test('dAbc')); //false
console.log(/abc$/.test('abcd')); //false
//如果^和&一起表示必须是精确匹配
console.log(/^abc$/.test('abc')); //true
//只有这种情况为true,其他全为false
console.log(/^abc$/.test('abbc')); //false
量词
量词(表示重复次数): 量词用来设定某个模式出现的次数
语法:
// * 重复零次或更多次 类似于>=0,但是不允许出现别的
console.log(/abc*/.test('abc')); //true
console.log(/abc*/.test(' ')); //true
console.log(/abc*/.test('abcabc')); //true
// + 重复一次或更多次 类似于>=1,但是不允许出现
console.log(/abc+/.test('abc')); //true
console.log(/abc+/.test(' ')); //false
console.log(/abc+/.test('abcabc')); //true
// ? 重复零次或一次 类似于0||1
console.log(/abc?/.test('abc')); //true
console.log(/abc?/.test(' ')); //true
console.log(/abc?/.test('abcabc')); //false
// {n} 重复n次 写几就必须出现几次
console.log(/abc{2}/.test('abc')); //false
console.log(/abc{2}/.test('abcabc')); //true
console.log(/abc{2}/.test('abcabcabc')); //false
// {n,} 重复n次或更多次 类似>=n
console.log(/abc{2,}/.test('abc')); //false
console.log(/abc{2,}/.test('abcabc')); //true
console.log(/abc{2,}/.test('abcabcabc')); //true
// {n,m} 重复n次到m次 > = n && < = m
console.log(/abc{2,4}/.test('abc')); //false
console.log(/abc{2,4}/.test('abcabc')); //true
console.log(/abc{2,4}/.test('abcabcabc')); //true
console.log(/abc{2,4}/.test('abcabcabcabc')); //true
console.log(/abc{2,4}/.test('abcabcabcabcabc')); //false
字符类
字符类: 量词用来设定某个模式出现的次数(比如\d 表示0~9,简略到极致)
- [ ]匹配字符集合
//后面字符串只要包含abc中任意一个字符,返回true
console.log(/[abc]/.test('body')); //true
console.log(/[abc]/.test('a')); //true
console.log(/[abc]/.test('vscode')); //true
console.log(/[abc]/.test('ab')); //true
// 加上精确匹配就只能输入一个
console.log(/^[abc]$/.test('ab')); //false
console.log(/^[abc]{2}$/.test('ab')); //true
console.log(/[abc]/.test('a')); //true
- 使用连字符-表示一个范围
// [a-z] [a-zA-Z] [0-9]
console.log(/[a-z]/.test('div')); //true
// []里面加上^取反符号
// [^a-z]匹配除小写字母以外的字符
console.log(/[^a-z]/.test('a')); //false
console.log(/[^a-z]/.test('A')); //true
console.log(/[^a-z]/.test('1')); //true
- 预定义: 指的是某些常见模式的简写模式
// \d 匹配0-9之间的数字 [0-9]
// \D 匹配0-9以外的字符 [^0-9]
// \w 匹配任意的字符,数字,下划线 [A-Za-z0-9-]
// \W 匹配所以除字符,数字,下划线以外的字符 [^A-Za-z0-9-]
// \s 匹配空格(包括换行符,制表符,空格符) [\t\r\n\v\f]
// \S 匹配非空格的字符 [^\t\r\n\v\f]
修饰符
修饰符: 修饰符约束正则执行的某些细节行为,如是否分大小也,是否支持多行匹配
<script>
// 语法: /表达式/修饰符
// i 是ignore的缩写,正则匹配时字母不区分大小写
// g 是global的缩写,匹配所有满足正则表达式
console.log(/a/i.test('a')); //true
console.log(/a/i.test('A')); //true
// 替换 replace
// 语法: 字符串.replace(/正则表达式/,'替换文本')
const str = 'Java是一门编程语言'
const str1 = str.replace(/Java/i, '前端')
console.log(str1);
</script>