Fork me on github

正则表达式

正则规则

 
/**
 *  对象:匹配字符串
 *  作用:
 *       1.验证表单(匹配,替换,提取)     
 */ 
/**    
 * 转义\
 *      \d匹配任一数字字符0-9
 *      \D匹配非数字字符^\d
 * 
 *      \s 空格 tab 换行 \n \r \t
 *      \S 非空格
 * 
 *      \w 字符  包括字母数字下划线
 *      \W非字符
 *      
 *      \b单词边界(独立单词)  空格 起始位置 结束位置 连词符号\W
 *
 */
/**
 * 定义对象
 */
//法1
var x='gg';
var reg1=new RegExp(x);
//法2,也可
var o=/abc/;

/**
 * test,检测字符串里有无某个正则规则,返回布尔值
 */
var str='helloabcf\"ff123';
console.log('hghjgjg+'+o.test(str) );


var reg2=/\bhello\b/;
console.log(reg2.test(str));
/**
 * match 返回匹配成功的内容数组/null
 */
// var reg3=/\d{3}/;
// console.log(reg3.match(str));

/**
 * 边界符 ^开头 $结尾
 * []限定符 出现任意一个
 */
var reg4=/^abc$/;//精确匹配abc!!!
var reg5=/abc/;//出现abc
var reg6=/[abc]/;//出现a b c任意一个
var reg7=/^[abc]$/;//三选一a||b||c  aa false
/**
 * 范围符 -
 */
var reg8=/^[a-z]$/;
/**
 * 字符组合
 */
var reg9=/^[a-zA-Z0-9_]$/;//大小写数字_都可  []多选一
var reg9=/^[^a-zA-Z0-9_]$/;//[]里的^取反  :大小写数字_都不可
/[0-p]{6}/
/**
 * 量词符
 *      * :0次或很多次  +:1次或很多次  ?:1次或0次
 *      {n,m}  最少n个,最多m个
 *      {n}   n次
 *      {n,}   最少n个,最多不限
 *      {0,m}
 */
var reg10=/^a*$/;//0或很多次
var reg11=/^a{3}$/;//3次
//用户名表单验证
var reg12=/^[a-zA-Z0-9_]{6,16}$/;//6-16次大小写/数字/_
var reg13=/^abc{3}$/ ;//abccc
var reg14=/^(abc){3}$/ ;//abcabcabc

/**
 * 替换
     * g全局匹配
     * i忽略大小写
     * gi全局匹配忽略大小写
 */
var str='andyandred';
// var newstr=str.replace('andy','baby');
var newstr=str.replace(/andy/,'baby');
var str2=str.replace(/激情|gay/g,'**');

正则例子

  • 检测某个字符串是否包含指定字符串

     let test = /ljj/
    /**
     * test,检测字符串里有无某个正则规则,返回布尔值
     */
     console.log('ljj test', test.test('iamljj')) // true
     /(uat)|(localhost)/.test(location.origin) // 是否为测试路径

     

  • 并非全部由数字组成

    /[^0-9]/g.test('333ttt')  // true
  • 全部由数字组成

    /[0-9]/g.test('333') ) // true
  • 检测是否为测试环境

    /80/.test(window.location.href)
    /(uat)|(localhost)/.test(location.origin) // 是否为测试路径
     //  (/(\/192.168.253.217)|(\/localhost)/ig).test(location.href)
  • 是否含有小数点

    /\./g.test('22.dd')  // true
    console.info('22.44', /^\d{1}\.\d{1,2}$/.test(4.33)) //true 检测数字构成:1.2 或者1.22形式   即整数部分含有1位,小数部分含有1位或者两位   \d{1}\.\d{1,2} 或者 ^\d{1}\.\d{1,2}$
  • 检测数字构成:1.2 或者1.22形式   即整数部分含有1位,小数部分含有1位或者两位

/\d{1}\.\d{1,2}/.test(4.33)  //true
/^\d{1}\.\d{1,2}$/.test(4.33)) //true
//^匹配输入字符串的开始位置 $匹配输入字符串的结束位置 
  •  用户名验证 

var reg12=/^[a-zA-Z0-9_]{6,16}$/;//6-16次大小写/数字/_
// var inp;
//     //  回车时  把文本框的值给span
//      input.onkeyup=function(e){
//         // onkeyup 键盘弹起
//         if(e.keyCode===13){//回车 asc为13
//             // 失去焦点事件
//             this.blur();
//             inp=input.value;
//             if(reg12.test(inp)){
//                 span.innerHTML='用户名合法';
//                 span.style.color='green';
//             }else{
//                 span.innerHTML='用户名不合法';
//                 span.style.color='red';
//             }
           
//         }
//     }
  • 座机号码验证 

    var input=document.querySelector('input');
    var span=document.querySelector('span');
    //或者符号|
    reg1=/^\d{3}-\d{8}|\d{4}-\d{7}$/;
    reg2=/^\d{3,4}-\d{7,8}$/;
    
    //全国座机号码 010-12345678 || 0530-1234567
    
    input.onblur=function(){
        if(reg2.test(this.value)){
           console.log('合法');
        }else{
           console.log('不合法');
        }
        
        }
        

     

使用

利用正则分离字符串“123hehe456hehe789”中的数字["123",'456','789']

//使用正则
function getReg(str){
    return str.match(/\d+/g);
}
console.log(getReg(str));
//不适用正则
function getArr(str){
    var arr=[];
    var r="";
    for(var i=0,l=str.length;i<l;i++){
        var n=str.charAt(i);//得到当前字符
        var as=n.charCodeAt(0);//得到ascII
        // var as=str.charCodeAt(i);
        if(as>=48 && as<=57){
            r+=n;//字符串拼接
        }else if(r){
                arr.push(r);
                r="";
        }
    }
    if(r)  arr.push(r);
    return arr;
}
console.log(getArr(str));

 敏感词替换

div.innerHTML= text.value.replace(/激情|gay/g,'**');

 

 
  • [abcde]  匹配abcde之中的任意一个字符
  • [a-d] 表示匹配 a 、 b 、 c 、 d 中的任意一个字符,
  • . 匹配除\n以外的任何字符(注意元字符是小数点)
  • [^fgh] 不与fgh之中的任意一个字符匹配
  • \w 匹配大小写英文字符及数字0~9中的任意一个及下画线,相当于[a-zA-Z0-9」
  • \W  不匹配大小写英文字符及数字0~9中的任意一个,相当于[^a-zA-Z0-9]
  • \s 匹配任何空白字符,包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。 注意:Unicode正则表达式会匹配全角空格符
  • \S 匹配任何非空白字符。等价于[^\f\n\r\t\v]
  • \d 匹配任何0~9中的单个数字,相当于[0-9]
  • \D 不匹配任何0~9中的单个数字,相当于[^0-9]
  • \b 匹配一个单词边界,也就是指单词和空格间的位置。
  • 例如,er\b可以匹配 never中的er,但不能匹配verb中的er
  • \B 匹配非单词边界,er\B能匹配verb中的er,但不能匹配never中的er
  • \t 匹配一个制表符。
  • \v 匹配一个垂直制表符。
  • \f 匹配一个换页符。
  • \n 匹配一个换行符。
  • \r 匹配一个回车符。
  • \cx匹配由x指明的控制字符。例如,cM匹配一个Ctr+M或回车符。x的值必须为A~Z或a~z之一。
  • ^ 匹配输入字符串的开始位置。[^]除非在方括号表达式中使用,此时它表示不接受该字符集合。
  • $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,则'$'也匹配'\n'或'\r'。(有示例)要匹配'$'字符本身,使用'\$'。
  • () 将位于()内的内容当作一个整体。

  • []匹配括号中的任何一个字符。例如,“b[an]g” 可以匹配“bag”“bng” 但是不能匹配“big”“bang”。
  • []中还可以使用“”来表示某一范围,例如,“[0-9]”表示从 “0”到“9”的所有数字,等价于“a[0123456789]c”,所以“a[0-9]c” 就可以匹配“a0c”“alc”…“a9c”等多个字符串。
  • []还可以指定多个区间,例如,[a-zA-Z0-9] 表示任意的字母和数字。

  • {} 按{}中的次数进行匹配。
  • 例如:正则表达式 A[0-9]{3}能够匹配字符"A"后面跟着正好3个数字字符的串,例如A1234 结果A123。
  • {n} n是一个非负整数。匹配确定的n次。
  • {n,} n是一个非负整数。至少匹配n次。
  • {n,m} :m和n均为非负整数,其中,n≤m。最少匹配n次且最多匹配m次。正则表达式[0-9]{4,6}匹配连续的任意4个、5个或者6个数字

  • * 匹配位于*之前的0个或多个字符。
  • ? 匹配位于?之前的0个或一个字符。
  • + 匹配位于+之前的一个或多个字符。正则表达式9+ 99 99
  • \ 表示位于\之后的为转义字符。如'\m'匹配字符'm','\n'匹配换行符。
  • | 匹配位于|之前或者之后的字符。 逻辑“或”运算(Or)。
  • x|y 匹配x或者y

 

 

 

 

 

 

 

 

posted @ 2021-03-22 11:15  我の前端日记  阅读(6)  评论(0编辑  收藏  举报
Copyright © 2021 LinCangHai
Powered by .NET 5.0 on Kubernetes