您的位置:首页 > 其它

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

2016-04-02 22:42 267 查看
正则表达式:简化普通字符串操作
操作字符串常用的函数:
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,'');
}
})();


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: