正则表达式---简化字符串操作

本文详细介绍正则表达式的各种应用场景,包括基本操作函数、正则表达式的方法(如test()、search()、match()、replace())、字符类、量词及实际案例,如邮箱验证、中文检测等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式:简化普通字符串操作

操作字符串常用的函数:

search():返回要查找的字符串第一次出现的位置,查找不到时返回-1.

 var str = 'abcdefg';
 alert ( str.search('bc') );  //返回1

substring(startIndex,endIndex):返回对应位置的子字符串

  alert ( str.substring(1,4) );  //返回’bcd’,不包含第4个字符
  alert( str.substring(1));    //返回’bcdefg’返回从startIndex到末尾的子串

charAt(index) :返回字符串对应位置上的字符

alert ( str.charAt(2) );  //返回字符 ’c’

split():将字符串分割成一个字符串数组      

 var str ='abc-g-4-78-u';
 var arr = str.split('-');
 for(var i=0;i<arr.length;i++){
     alert(arr[i]);    //依次输出:’abc’ , ’g’ , ’4’ , ’78’ , ’u’
  }

replace(‘a’ , ’b’):将字符串中第一个字符’a’替换为字符’b’    

 var str = 'abaaacdefg';
 alert(str.replace('a','A'));//返回'Abaaacdefg',只替换了第一个

正则表达式(规则表达式):强大的字符串匹配工具

//-------------------------------------1:正则表达式的test()方法 -----------------------------------------------------//  
//正则表达式对象:JS风格

  var str='abcdefg';
  var reg=new RegExp('a');
  alert(reg.test(str));//返回true,  test()方法,用来测试字符串是否具有符合某种规则的子串,有返回true,否则返回false
  
  var str='Abcdefg';
  var reg=new RegExp('a','i');//参数i:表示忽略大小写
  alert(reg.test(str));//返回true
//正则表达式对象的另一种表示方式:perl(第一个引入正则的程序,比较古老)风格
  var str='abcdefg';
  var reg=/a/;
  alert(reg.test(str));//返回true
  
  var str1='Abcdefg';
  var reg=/a/;
  alert(reg.test(str1));//返回false
  
  var str2='Abcdefg';
  var reg=/a/i;  //忽略大小写
  alert(reg.test(str2));//返回true  
//-------------------------------------------2:正则表达式与search()方法相结合 -----------------------------------//
  var str='abcdefg';
  alert(str.search(/d/));//返回3
  
  var str='as 43 hh';
  alert(str.search(/\d/));//查找数字在str中首次出现的位置
  
  var userAgent=window.navigator.userAgent;
  alert(userAgent.search(/firefox/i));//不等于-1 就是firefox浏览器  
 //------------------------------------3:正则表达式的match()方法---------------------------------------------------//
  var str='13 f6 -g67 8 gg -=3' ;
  //alert(str.match(/\d/)); //返回1,返回第一个匹配到的字符:'1'
  //alert(str.match(/\d/g));  //返回一个字符数组: '1','3','6','6','7','8','3'
  alert(str.match(/\d+/g));  //返回一个字符串数组: '13','6','67','8','3'  其中"\d+"表示多个数字  

//-------------------------------------4:正则表达式与replace()方法相结合---------------------------------------// 

//字符串方式
var str='abaacdAAfg';
alert(str.replace('a','T'));//将str中的'a'都替换成'A',返回替换后的字符串:'TbaacdAAfg'
   //缺点:只替换第一个字符
       
//正则方式
var str='abaacAAfg';
alert(str.replace(/a/,'T')); //仍然只替换第一个'a'
alert(str.replace(/a/g,'T'));//但加上条件g,就替换了所有的'a'
alert(str.replace(/a/gi,'T'));//返回:'TbTTcdTTfg',忽略大小写替换

//网络敏感词过滤
(function(){
  var filterPre=document.getElementById('txt1');
  var filterAft=document.getElementById('txt2');
  var btn=document.getElementById('btn1');
  btn.onclick=function(){  
 var re=/我们|你们|他们/g; // '|' 代表 'or'
 filterAft.value=filterPre.value.replace(re,'****');  
  }

})(); 
//------------------------------------5:正则表达式:字符类---------------------------------------------------------//
     //----------------------------------方括号:[]-----------------------------------------------------//   
//方括号'[]'用法一:或者,如: /1[abc]2/ 等价于 /1a2|1b2|1c2/,方括号匹配到的是一个字符
 var str='1a2 abc 1c2 yj';
 var re=/1[abc]2/g;
 alert(str.match(re)); //返回字符串数组:'1a2','1c2'  
//方括号'[]'用法二:范围,如: 数字/[0-9]/等价于/\d/ 、数字或小写字母/[0-9a-z]/
//方括号'[]'用法三:排除,如:[^a]表示除'a'之外的字符、[^\d]表示除数字之外的字符、[^a-z]表示除了小写字母之外的字符
    //-----------------------------转义字符:. 、\d、\w、\s、\D、\W、\S--------------------// 
             .           任意字符   
            \d         digital 等价于[0-9],数字 ;  
            \D         等价于[^0-9]或[^\d]除了数字之外  
            \w        word 等价于[a-zA-Z0-9_],即数字、字母或下划线   ;   
            \W        除了\w之外的字符
             \s        space  空白  ; 
            \S         除了空白之外

//---------------------------------------6:正则表达式:量词--------------------------------------------------------//        

           {n, m}     表示最少n次,最多m次
           {n, }          最少n次,最多不限  
           { ,m}          最少不限,最多m次
           {n}            恰n次
            //例如:QQ号:最少5位,最多11位,且第一位不为0 :匹配正则为:/[1-9]\d{4,10}/
           ' + '     代表量词 {1,}
           ' * '     代表量词 {0,} 不推荐使用
           ' ? '     代表量词 {0,1}

//-------------------------------------------7:正则表达式的应用-----------------------------------------------//

//-----------------------检测邮箱--------------------------//
//规则:一串数字|字母|下划线 @   一串英文|数字    .   一串英文(且长度为2-4位)
//每部分相应的正则: \w+     @   [0-9a-zA-Z]+    \.      [a-zA-Z]{2,4}]
//因此得到正则表达式为:/\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}/
   
var str='秒回1dsdsf@163.comerfgh';
////var reg=/\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}/;
 var reg=/^\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}$/
alert(reg.test(str)); //返回true,因为test()检测的是str中是否存在符合规则的字符串,有就返回true
		   
//需要将修改reg为:reg=/^\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}$/
//--------------------'^' 代表行首;    '$' 代表行尾-------------//
 //行首和行尾还可以用来去前后空格:如下
  var str1='    ffe df hgth   ';
  var reg=/^\s+/;
  alert('('+str1.replace(reg,'')+')');  //返回('ffe df hgth   ')
  var reg1=/^\s+|\s+$/g;
  alert('('+str1.replace(reg1,'')+')'); //返回('ffe df hgth')  
  //--------------------检测中文---------------------------------//
  //[\u4e00-\u9fa5]: '\u':代表'utf-8'编码,'4e00'代表第一个汉字:'一','9fa5'代表最后一个汉字
  
  //所以检测中文字符串使用正则:/^[\u4e00-\u9fa5]+$/
 
 //-----------------------完美的getByClass---------------------//
 /* 
           function getByClass(oParent,sClass){
               var aEle=oParent.getElementsByTagName('*');
                var aResult=[];
                for(var i=0;i<aEle.length;i++){
                          //if(aEle[i].className==sClass){
                          if(aEle[i].className.search(sClass)!=-1){//但search()方法,对'abox'也返回true
                                 aResult.push(aEle[i]);
                          }
                }
               return aResult;
           }
  */
   //单词边界:'\b'
  function getByClass(oParent,sClass){
        var aEle=oParent.getElementsByTagName('*');
        var aResult=[];
 
        var reg=new RegExp('\\b'+sClass+'\\b');
 
       for(var i=0;i<aEle.length;i++){
               //if(aEle[i].className==sClass){
              //if(aEle[i].className.search(sClass)!=-1){//但search()方法,对'abox'也返回true
               if(reg.test(aEle[i].className)){ 
                        aResult.push(aEle[i]);
               }
        }
        return aResult;
  }

<p>过滤前</p><textarea id="txt1" rows="10" cols="40"></textarea>
<p>过滤后</p><textarea id="txt2" rows="10" cols="40"></textarea>
//手机文本不支持HTML,手机上的小说都是纯文本
   //偷小说(手机上的小说阅读网站是从后台把数据取过来,然后过滤掉HTML标签显示的)
     (function(){
           var filterPre=document.getElementById('txt1');
           var filterAft=document.getElementById('txt2');
           var btn=document.getElementById('btn1');
           btn.onclick=function(){
              //var re=/<.+>/g;    //符号'.'表示任意一个字符 而'.+'表示许多个任意字符
              //filterAft.value=filterPre.value.replace(re,'');
              //转换后为空:原因:正则特点:贪婪,匹配的是尽可能长的字符串,
              //所以匹配的是HTML文档中的第一个标签的'<'和文档末尾最后一个标签的'>'
              //修改
               var re=/<[^<>]+>/g; //即:<>里面不能再出现<>了
               filterAft.value=filterPre.value.replace(re,'');
             }
  })();
   


            




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值