这是我参与8月更文挑战的第1天
元字符
元字符是指一位指定类型的字符
元字符 | 功能 |
---|---|
\d | 匹配一个数字 |
\D | 匹配一个非数字字符 |
\w | 匹配一个单 字字符(字母、数字、或者下划线) |
\W | 匹配一个非单字字符 |
\s | 匹配一个空白字符、包括空格、制表符和换行符 |
. | 任意字符 |
开头和结尾
元字符 | 功能 |
---|---|
^ | 匹配开头 |
$ | 匹配结尾 |
元字符注意事项
如果使用new RegExp()写法,反斜杠需要多写一个
比如/^\d/和new RegExp('^\\d')是同一个意思
<script>
// 正则表达式
var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;
//待检测的字符串
var str1 = '444-5555-000';
console.log(regexp1.test(str1)); //true
// 创建正则表达式
var regexp2 = /^\w\w\w-\w\w\w\w-\w\w\w$/;
// 待检测的字符串
var str2 = 'abc-__ab-123';
console.log(regexp2.test(str2)); //true
// 创建正则表达式
//如果将 . 前面的反斜杠删除的话 . 就变成了元字符 任意字符 所有特殊字符前的反斜杠必须加上
var regexp3 = /^\d\d\d\.\d\d\^\d\d\#$/ ;
// 待检测字符
var str3 = '123木45^62#';
console.log(regexp3.test(str3));false
</script>
方括号表示法
使用方括号,比如[xyz],可以创建一个字符,表示匹配方括号中的任意字符 可以使用短横-来指定一个字符范围,^表示否定
元字符 | 等价的方括号表示法 |
---|---|
\d | [0-9] |
\D | [^0-9] |
\w | [A-Za-z0-9_] |
\W | [^A-Za-z0-9_] |
<script>
// 1 验证某字符串是否是五位字母,大小写均可
var regexp1 = /^[a-zA-Z]{5}$/;
var str1 = 'sSsdg';
var str2 = 'sSsd5';
console.log(regexp1.test(str1)); //true
console.log(regexp1.test(str2)); //false
// 2 请验证某字符串是否是五位,且仅有小写字母、点构成
var regexp2 = /^[a-z\.]{5}$/;
var str3 = 'sfd.s';
var str4 = 'sfd.*';
console.log(regexp2.test(str3)); //true
console.log(regexp2.test(str4)); //false
// 验证某字符串是否是4位小写字母,且最后一位不能是m字母
// 创建正则表达式
regexp3 = /^[a-z]{3}[a-ln-z]$/;
str5 = 'asfs';
str6 = 'asfm';
str7 = 'sd2f';
console.log(regexp3.test(str5)); //true
console.log(regexp3.test(str6)); //false
console.log(regexp3.test(str7)); //false
</script>
量词
量词 | 意义 |
---|---|
* | 匹配前面一个表达式0次或者多次。等价于{0,} |
+ | 匹配前面一个表达式1次或者多次。等价于{1,} |
? | 匹配前面的一个表达式0次或者1次。等价于{0,1} |
{n} | n是一个整数,匹配了前面一个字符刚好出现了n次 |
{n,} | n是一个整数,匹配前面一个字符至少出现了n次 |
{n,m} | n和m都是整数,匹配前面的字符至少n次最多m次 |
\
<script>
// 题目1 : 请验证字符串是否符合手机号码的规则:11位数字并且以1开头
var regexp1 = /^1\d{10}$/;
var str1 = '12345678912';
var str2 = '24512555552';
console.log(regexp1.test(str1));
console.log(regexp1.test(str2));
// 题目2 请验证某字符串是否是这样的:以字母开头,中间是任意位数字(至少1位)并以字母结尾
var regexp2 = /^[a-zA-Z]\d+[a-zA-Z]$/;
var str3 = 'a256456321a';
console.log(regexp2.test(str3));
// 题目3 请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(最少一位字符数组下划线)后以.com结尾,也可以.com .cn结尾
var regexp3 = /^w{3}\.\w+\.com(\.cn)?$/;
console.log(regexp3.test(prompt()));
</script>
修饰符
修饰符也叫作标志(flags),用于使用正则表达式实现高级搜索
修饰符 | 意义 |
---|---|
i | 不区分大小写搜索 |
g | 全局搜索 |
使用方法
var re = /m/gi;
var re = new RegExp('m','gi');
正则表达式的相关方法
正则表达式可以打点调用
方法 | 简介 |
---|---|
test() | 测试某字符串是否匹配正则表达式,返回布尔值 |
exec() | 根据正则表达式,在字符串中进行查找,返回结果数组或者null |
\
text()方法
正则表达式的test()方法用来测试某字符串是否匹配此正则表达式,它返回true或false
exec()方法
exec()方法功能是:在一个指定字符串中执行一个搜索匹配查找,返回一个结果数组或null
exec()方法最有趣的是,有“g“修饰符的正则表达式将自动成为”有状态“的,这意味着可以对单个字符串中的多次匹配结果进行逐条的遍历
<script>
var str = 'abc123def456ghi789';
var regexp = /\d+/g;
var result;
while(result = regexp.exec(str)){
console.log(result[0]);
}
</script>
字符串的相关方法
字符串中有一些方法可以使用正则表达式
方法 | 简介 |
---|---|
search() | 在字符串中根据正则表达式进行查找匹配,返回首次匹配的位置索引,测试不到则返回-1 |
match() | 在字符串中根据正则表达式进行查找匹配,返回一个数组,找不到则返回null |
replace() | 使用代替字符串替换掉匹配到的子字符串,可以使用正则表达式 |
split() | 分割字符串位数组,可以使用正则表达式 |
<script>
var str = 'abc123def4567';
// search()方法,很想indexOf()
var result1 = str.search(/\d+/g);
var result2 = str.search(/m/g);
console.log(result1); //3
console.log(result2); //-1
//match()方法
var result3 = str.match(/\d+/g);
console.log(result3); // ["123", "4567"]
//replace()方法
var result4 = str.replace(/[a-z]+/g,'*');//注意+表示贪婪的,尽可能多的匹配连续的小写字母
console.log(result4); //*123*4567
//split()方法
var result5 = str.split(/\d+/g);
console.log(result5);
</script>
使用正则表达式进行表单验证
利用正则表达式进行表单验证是正则表达式最重要的实际应用
实际上,很多正则表达式不需要我们自己写,可以通过搜索引擎查找,可以拿来即用