正则

105 阅读1分钟

正则表达式

  • 定义字符串中字符出现规则的表达式

何时使用:

  • 切割 替换 【验证】!

如何使用:

  • 语法:/正则表达式/

简单的正则

  • 关键字原文 "no" -> /no/后缀
  • 后缀:
    • g:找全部
    • i:忽略大小写

备选字符集

  • 语法:/^[备选字符集]$/
  • 强调
    • 一个中括号,只管一位字符
    • 问题:正则表达式默认只要满足就不管后续了,而我们做验证的人,希望的是用户从头到尾按照我们的要求来,希望从头到尾完全匹配:
    • 解决:前加^,后加$,两者同时使用,代表要求从头到尾完全匹配/^[备选字符集]$/只要做验证必加!
  • 特殊
    • 如果备选字符集中的ascii码是连续的,那么可用-省略掉中间部分
    • 一位数字:[0-9];
    • 一位字母:[A-Za-z];
    • 一位数字、字母、下划线:[0-9A-Za-z_]
    • 一位汉字:[\u4e00-\u9fa5]
    • 除了xxx之外的:[^0-9] - 很少使用,范围太广了

预定义字符集

  • 一位数字:\d ===>[0-9]
  • 一位数字、字母、下划线:\w ===> [0-9A-Za-z_]
  • 一位空白字符:\s
  • 一位除了换行外的任意字符:. - 很少使用,范围太广了
  • 建议:优先使用预定义字符集,预定义满足不了我们再用备选字符集补充

量词

  • 规定一个字符集出现的次数

有明确数量

  • 字符集{n,m}:前边相邻的字符集,至少n个,最多m个
  • 字符集{n,}:前边相邻的字符集,至少n个,多了不限
  • 字符集{n}:前边相邻的字符集,必须n个

无明确数量

  • 字符集?:前边相邻的字符集,可有可无,最多1个
  • 字符集*:前边相邻的字符集,可有可无,多了不限
  • 字符集+:前边相邻的字符集,至少一个,多了不限

选择和分组

  • 选择:在多个规则中选一个 规则1|规则2
  • 分组:将多个字符集临时组成一组子规则 (规则1|规则2)

指定匹配位置

  • ^:开头
  • $:结尾
  • 特殊:两者同时使用,前加^,后加$,表示从头到尾要求完全匹配 - 只要你做【验证】

密码强度验证

  • (?![0-9]+$) -> 不能全由数字组成,可能有大写、小写、汉字、日文、特殊符号...
  • (?![a-z]+$) -> 不能全由小写组成,可能有数字、大写、汉字、日文、特殊符号...
  • (?![0-9a-z]+$) -> 不能全由数字组成、也不能全由小写组成、也不能全由数字和小写的组合组成

支持正则表达式的字符串API

  • 切割:var arr=str.split("固定切割符"/RegExp);
  • 替换
    • 基本替换法:str=str.replace(/正则表达式/后缀,"新内容");
    • 高级替换法
str=str.replace(/正则表达式/后缀,function(a,b,c){
    //console.log(a);//正则匹配到的关键字
    //console.log(b);//正则匹配到的关键字的下标
    //console.log(c);//原字符串
    return 判断a关键字的长度,而返回不同的星星数量
});

正则对象

  • 创建:
    • 直接量:var reg=/正则表达式/后缀;
    • 构造函数:var reg=new RegExp("正则表达式","后缀");
  • API:
    • 验证:var bool=reg.test(用户输入的);