正则表达式
正则表达式是一种用于描述、匹配和操作字符串的模式,提供了一种强大而灵活的方式来搜索、替换和验证字符串。
边界符
^ : 表示匹配行首的文本(以谁开始)
$ : 表示匹配行尾的文本(以谁结束)
量词符:量词符用来设定某个模式出现的次数。
* :重复0次或更多次
+ :重复1次或更多次
? :重复0次或1次
{n} : 重复n次
{n,} :重复n次或更多次
{n,m} :重复n到m次
预定义类
\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]
括号总结
大括号 量词符,里面表示重复次数
中括号 字符集合,匹配方括号中的任意字符.
小括号 表示优先级
修饰符
改变匹配模式的行为的特殊标记
g
(全局修饰符):在整个字符串中查找所有匹配项,而不仅仅是第一个匹配项i
(忽略大小写修饰符):在匹配时忽略大小写
test() 方法:
用于测试字符串是否与正则表达式匹配,并返回布尔值
const pattern = /hello/;
const str = 'Hello, how are you?';
console.log(pattern.test(str)); // 输出: true
exec() 方法:
用于在字符串中执行正则表达式模式的搜索,并返回第一个匹配结果的详细信息
const pattern = /hello/;
const str = 'Hello, how are you?';
console.log(pattern.exec(str)); // 输出: ["hello", index: 7, input: "Hello, how are you?", groups: undefined]
match() 方法:
用于在字符串中执行正则表达式模式的搜索,并返回所有匹配结果组成的数组
const pattern = /hello/g;
const str = 'Hello, how are you? hello there';
console.log(str.match(pattern)); // 输出: ["hello", "hello"]
search() 方法:
用于在字符串中搜索与正则表达式匹配的位置,并返回第一个匹配的索引值
const pattern = /hello/;
const str = 'Hello, how are you?';
console.log(str.search(pattern)); // 输出: 7
replace() 方法:
用于将正则表达式匹配的部分替换为指定的字符串
const pattern = /hello/;
const str = 'Hello, how are you? hello there';
console.log(str.replace(pattern, 'Hi')); // 输出: "Hello, how are you? Hi there"
实例:
查找字符串中所有敏感词的内容和位置
var str = "小明:我滴是日本人。小校:我是美国人。小台:我是泰国人"
//\u4e00-\u9fa5 是 Unicode 范围,表示包含所有的中文字符
//第一次用于获取第一个匹配项,第二次用于遍历所有匹配项
var reg = /国[\u4e00-\u9fa5]/;
var arr = reg.exec(str);
var reg = /国[\u4e00-\u9fa5]/g;
do{
var arr = reg.exec(str);
console.log(arr);
if(arr != null){
console.log(`在${arr.index}位置,找到敏感词${arr[0]}`);
}
}while(arr != null);
//在16位置,找到敏感词国人
//在25位置,找到敏感词国人
检查给定字符是否为手机号码格式,只检查格式,不保证手机号一定有效
function isPhoneNumber(input) {
var reg = /^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;
return reg.test(input);
}
检查给定字符串是否为合法电子邮箱地址格式
function isPhoneNumber(input) {
var reg = /^\w+@(\w+\.)+\w+$/;
return reg.test(input);
}
身份证号(15位、18位数字)
^\d{15}|\d{18}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
^[a-zA-Z]\w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
匹配长度为5~20的字符串,必须字母开头并且可带字母、数字、‘_’、’.‘的字符串
'^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$'
匹配长度为6~20的字符串,可以包含字母数字下划线
'^(\w){6,20}$'
检查给定字符串是否只包含英文字母大小写
'^[a-zA-Z]+$'