Javascript正则表达式

108 阅读4分钟

一、正则表达式:

  含义:定义字符串中【字符出现的规则】的表达式
  何时使用:切割  替换  *验证*
  如何使用:
     1、最简单的正则:关键字原文,但是写法和以前的字符串不同,"no"-->/不同/ig  
     (i:忽略大小,g:全部,替换的话默认只会替换第一个匹配到的关键字)

2、备选字符集:

         规定一位字符可能出现的情况
         何时使用:只要关键字有多种情况的时候
         如何使用:/[备选字符集]/
             强调:1、一个括号中,只能管一个字
                   2、问题:正则默认只要满足后,就不管后续操作,后续用户就可以乱来!
               解决:【只要是做验证】,我们肯定希望用户完全按照我们的规则来玩,必须写为:
               /^[备选字符集]$/-前加^后加$的意思是要求用户从头到尾完全匹配
               特殊:1、如果选字符集种有部分uniconde号是连续的,则可用-省略掉中间部分
               比如:
                   一位数字:[0-9]
                   一位字母:[A-Za-z]
                   一位数字、字母、下划线:[0-9A-Za-z]
                   一位汉子:[\u4e00-\u9fa5];
                     2、除了xxx之外,其他都可以
                         [^xxx]-范围太广,不推荐

3、预定义字符集:

前辈们提前定义了的一些常用的字符集

1.   一个数字:\d  ===[0-9]
2.   一位数字、字母、下划线:\w ===[0-9A-Za-z]
3.   一位空白字符:\s ===  空格、制表符、换行
4.   一位除了换行外的任意字符:. -范围太广,不推荐
-   问题:预定义字符集是固定的,不灵活
-   建议:开发时优先使用预定义字符集,预定义字符集满足不了,再用备选字符集补充
    强调:不管是备选字符集还是预定义字符集,一个只管一位

4、量词:规定了字符集出现的次数

如何使用

1、有明确的数量

  1. 字符集{n,m}:前边相邻的字符集最少出现n次,最多出现m次
  2. 字符集{n,}:前边相邻的字符集最少出现n次,多了不限
  3. 字符集{n}:前边相邻的字符集必须出现n次

2、没有明确数量

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

3、指定匹配位置

  1. ^:以xxxxx开头
  2. $:以xxxx结尾
  3. 特殊:如果同时使用了,前加^后加$,从头到尾完全匹配 只要是做验证,必须这么写 4、选择和分组:

选择:

  1. 可以再多个条件中选择一个
  2. 规则1|规则2

分组:

  1. 选择和分组一般来说都是需要搭配使用的 - 添加了子规则
  2. (规则1|规则2)

5、预判:

目的:密码强度:4-6位密码,可以输入字母数字,但是必须要有一位大写和一位数字的组合

 公式:比如:
 1、/^(?![0-9]+$)$/ - 不能全由数字组成,可能有大写字母、
 小写字母、汉字、特殊符号、日文、韩文...
 2、/^(?![A-Za-z]+$)$/ - 不能全由大写组成,也不能全由小写组成,也不能由大写和小写的组合组成,可能有数字、汉字、特殊符号、日文、韩文...
-           //4-6位密码,可以输入字母数字,但是必须要有一位大写和一位数字的组合
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{4,6}$/
-           //4-6位密码,可以输入字母数字,但是必须要是3者的组合
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)(?![0-9A-Z]+$)[a-zA-Z0-9]{4,6}$/;

二、字符串的APl:

1、切割:

var arr=str.split(固定切割符/RedExp);

2、替换

基本替换法

 str=str.replace(正则表达式/gi"新内容");
 注意;替换时,不要前加^后加$,我们不需要完全匹配,只需要找到关键字做途欢而已,
 想要替换所有的一定要加后缀g
 问题:替换的新东西,只能是固定的

高级替换法;

str=str.replace(/[我卧握窝][去草操槽曹]+g,function(key,i,str){//此回调函数会自动调用,
找到几个关键字就会执行几次
    console.log(key);//当前次正则匹配到的关键字
    cosonle.log(i);当前次正则匹配到的关键字的下标
    cosonle.log(str);//原文本身
    return key.length==2?"**":"**";

格式化:如果替换时,正则中带有分组,那么你的回调函数会得到更多的形参

var str="500103198602215933"
var reg=/\d{6}(\d{4})(\d{2})\d{4}/;
str=str.replace(reg,function(key,a,b,c,i,str){
            cosonle.log(key);//正则匹配到的内容
            cosonle.log(a);//第一个分组匹配到的内容
            cosonle.log(b);//第二个分组匹配到的内容
            cosonle.log(c);//第三个分组匹配到的内容
            你有多少个分组就会多出多少个形参,但是最后两个一定是下标和原文
            cosonle.log(i);
            cosonlr.log(str);
            return a+"年"+b"月"+c"日";
                    }

正则对象*****

创建:

1. 直接量方式:var reg=/正则表达式/后缀:
2. 构造函数方式:var reg=new RegExp("正则表达式""后缀");

  • 方法
验证:var bool=reg.test("用户输入的东西");
  true->用户输对了     false->用户不通过