什么是正则表达式

1)什么是正则表达式

快速感知正则表达式

image.png

正则表达式“按位”描述规则

image.png

正则表达式

1)正则表达式的创建

image.png

2)元字符

“元字符”是指一位指定类型的字符

元字符 功能
\d d 匹配一个数字
\D 匹配一个非数字字符
\w 匹配一个单字字符(字母、数字或者下划线)
\W 匹配一个非单字字符
\s 匹配一个空白字符,包括空格、制表符和换行符
. 任意字符

“\”:\”([0-9a-zA-Z_]+)?\””

开头和结尾

image.png

注意事项

image.png

举例

  1. //定义正则表达式
  2. var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;
  3. var str1 = '333-3333-333';
  4. console.log(regexp1.test(str1));
  5. var regexp2=/^\w\w\w-\w\w\w\w-\w\w\w$/;
  6. var str2 = '333-3333-333';
  7. console.log(regexp2.test(str2));

字符的转义

image.png
image.png

  1. var regex3 = /^\d\d\d\.\d\d\^\d\d\#\d\d$/;
  2. var str3 = '122.34^87#87';
  3. console.log(regex3.test(str3));

3)方括号表示法

image.png
image.png

小题目

image.png

  1. //学号字符串
  2. var str='y4444555';
  3. //用正则表达式进行检查
  4. console.log(/^[yb]\d{7}$/.test(str));
  5. //题目1:请验证某字符串是否是5位字母,大小写均可
  6. var str1='sdsdd';
  7. console.log(/^[a-zA-Z]{5}/.test(str1));
  8. //题目2:请验证某字符串是否是5位,且仅有小写字母、点构成
  9. var str2='gjh.s';
  10. console.log(/^[a-z\.]{5}$/.test(str2));
  11. //题目3:请验证某字符串是否是4位小写字母,且最后一位不能是m字母
  12. var str3='asdd';
  13. console.log(/^[a-z]{3}[a-ln-z]/.test(str3));

4)量词

量词 意义
* 匹配前一个表达式次或多次。等价于{0,}
+ 匹配前面一个表达式1次或者多次。等价于{1,}
? 匹配前面一个表达式次或者1次。等价于{0.1}
{n } n是一个正整数,匹配了前面一个字符刚好出现了n次
{n,} n是一个正整数,匹配前一个字符至少出现了n次
{n,m} n和m都是整数,匹配前頭的字符至少次最多m次

image.png

  1. //题目1:请验证字符串是否符合手机号码的规侧:11位数字,并且肯定以1开头
  2. var str1='12222222222';
  3. var regex1=/^1\d{10}$/;
  4. console.log(regex1.test(str1));
  5. //题目2:请验证某字符串是否是这样的:以字母开头,中间是任意位数字(最少1位)构成,并以字母结尾
  6. var str2='a22222222s';
  7. var regex2=/^[a-zA-Z]\d+[a-zA-Z]$/;
  8. console.log(regex2.test(str2));
  9. //题目3:请验证某字符串是否符合网址规则:以w.开头,中间是任意位的字符(字母数字下划线) ,最后以.com结尾,也可以以.com.cn结尾
  10. var str3='www.ssss.com';
  11. var regex3=/^www\.\w+.com(\.cn)?$/;
  12. console.log(regex3.test(str3));

5)修饰符

image.png
image.png

正则表达式和字符串

1)正则表达式的相关方法

image.png

test()方法

image.png

esec()方法

image.png

  1. var str='asdddd34554eferf243';
  2. var reg=/\d+/g;
  3. var resy=reg.exec(str);
  4. console.log(resy);
  5. var result;
  6. while(result=reg.exec(str)){
  7. console.log(result[0]);
  8. };

2)字符串的相关方法

image.png

  1. var str = 'abc123def4567ghi89';
  2. // search()方法,很像indexOf(),返回查找到的第一个下标,如果找不到就是-1
  3. var result1 = str.search(/\d+/g);
  4. var result2 = str.search(/m/g);
  5. console.log(result1); // 3
  6. console.log(result2); // -1
  7. // match()方法,返回查找到的数组,找不到就是null
  8. var result3 = str.match(/\d+/g);
  9. console.log(result3); // ["123", "4567", "89"]
  10. // replace()方法,进行替换
  11. var result4 = str.replace(/[a-z]+/g, '*'); // 注意+表示贪婪的,尽可能多的连续匹配小写字母
  12. console.log(result4); // *123*4567*89
  13. // split()方法,进行字符串拆为数组
  14. var result5 = str.split(/\d+/g);
  15. console.log(result5); // ["abc", "def", "ghi", ""]

正则表达式的应用

1)正则表达式的应用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .warning {
  9. color: red;
  10. display: none;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <div>
  16. <p>
  17. 请输入中文姓名:
  18. <input type="text" id="nameField">
  19. <span class="warning" id="nameWarning">输入的姓名不合法</span>
  20. </p>
  21. <p>
  22. 请输入手机号码:
  23. <input type="text" id="telField">
  24. <span class="warning" id="telWarning">输入的手机号码不合法</span>
  25. </p>
  26. <p>
  27. 请输入Email
  28. <input type="text" id="emailField">
  29. <span class="warning" id="emailWarning">输入的Email不合法</span>
  30. </p>
  31. </div>
  32. <script>
  33. var nameField = document.getElementById('nameField');
  34. var telField = document.getElementById('telField');
  35. var emailField = document.getElementById('emailField');
  36. var nameWarning = document.getElementById('nameWarning');
  37. var telWarning = document.getElementById('telWarning');
  38. var emailWarning = document.getElementById('emailWarning');
  39. // 当文本框失去焦点,就是光标不在文本框中了
  40. nameField.onblur = function () {
  41. // 得到姓名
  42. var name = nameField.value;
  43. if (/^[\u4E00-\u9FA5]{2,4}$/.test(name)) {
  44. // 如果通过校验
  45. nameWarning.style.display = 'none';
  46. } else {
  47. // 如果没有通过校验
  48. nameWarning.style.display = 'inline';
  49. }
  50. };
  51. telField.onblur = function () {
  52. // 得到电话
  53. var tel = telField.value;
  54. if (/^1\d{10}$/.test(tel)) {
  55. // 如果通过校验
  56. telWarning.style.display = 'none';
  57. } else {
  58. // 如果没有通过校验
  59. telWarning.style.display = 'inline';
  60. }
  61. };
  62. emailField.onblur = function () {
  63. // 得到email
  64. var email = emailField.value;
  65. // 合法的email都是abc_def123@abc.net
  66. if (/^\w{2,}\@\w{2,}\.[a-z]{2,4}(\.[a-z]{2,4})?$/.test(email)) {
  67. // 如果通过校验
  68. emailWarning.style.display = 'none';
  69. } else {
  70. // 如果没有通过校验
  71. emailWarning.style.display = 'inline';
  72. }
  73. };
  74. </script>
  75. </body>
  76. </html>