首頁 >web前端 >js教程 >javascript正規表示式基礎知識入門_javascript技巧

javascript正規表示式基礎知識入門_javascript技巧

WBOY
WBOY原創
2016-05-16 16:03:011365瀏覽

正規表示式的好處到底在哪裡呢,下面我們先進行個了解:
我們用js中處理字串的方法,寫出取出字串中數字的函數:

 var str='dgh6a567sdo23ujaloo932';
   function getNumber(obj){
     var arr=[];
     for (var i = 0; i < obj.length; i++) {
       if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
           arr.push(obj.charAt(i));
         }
     }
     return arr;
   };
   console.log(getNumber(str));  //["6", "5", "6", "7", "2", "3", "9", "3", "2"]

上面的方法我們取出了字串中的數字,但是我們不滿意,我們需要的是['6','567','23','932']的形式,對函數進行改造:

function getNumber(obj){
    var arr=[];
    var temp='';
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          temp+=obj.charAt(i);//现将相邻的数字连接起来
        }
        else{ //每当连接的数字断开时,就在这执行
          if (temp) {
            arr.push(temp);
            temp='';
          }
        };
    }
    if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
            arr.push(temp);
            temp='';
          }
    return arr;
  };

那我們用正規表示式的方式來解這個函數實現的功能:

function getNumber2(obj){
    var arr=[];
    var re=/\d+/g;
    arr.push(obj.match(re));
    return arr;
  };

完整的看看程式的運作結果吧:

<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'>
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6a567sdo23ujaloo932';
  /*function getNumber(obj){
    var arr=[];
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          arr.push(obj.charAt(i));
        }
    }
    return arr;
  };*/
  function getNumber(obj){
    var arr=[];
    var temp='';
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          temp+=obj.charAt(i);//现将相邻的数字连接起来
        }
        else{ //每当连接的数字断开时,就在这执行
          if (temp) {
            arr.push(temp);
            temp='';
          }
        };
    }
    if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
            arr.push(temp);
            temp='';
          }
    return arr;
  };
  function getNumber2(obj){
    var arr=[];
    var re=/\d+/g;
    arr.push(obj.match(re));
    return arr;
  };
  console.log(getNumber(str));
  console.log(getNumber2(str)); 
};
</script>
<body>
</body>
</html>

從上面的例子我們可以看出來,正則表達式的方法有著同樣的效果,但是代碼更加簡短,更加高效,這就是正則的好處啊
正規是為了更有效率的處理字串而產生的,和字串處理方法一樣,只是更有效率、簡潔(正規只處理字串)

下面我們來系統的學習一下,正規的幾個常用的方法:

在這之前說一下正規的寫法,正規和其他物件array()、object()、Date()等都一樣,都有初始化的方式
var re=/這裡面要寫匹配的東西,不寫的話就是注視符號了/; //這樣的就是正則對象的簡單創建,後面文章我都是直接用它來代替的
var re=new RegExp(); //這樣的創建方式也可以的,大家懂得,只是和簡寫不同的是參數傳遞有點不一樣

(1)test

意義:正規去匹配字串,當匹配成功回傳true,反之,回傳false;
語法:re.test(字串);
先說點轉義字 :
/s空格 /S非空格 /d數字 /D非數字 /w字元(字母、數字、底線) /W非字元
舉個例子:判斷一個字串是否都是數字

<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6a567sdo23ujaloo932';
  var str2='123456';
  function allNumber(obj){
    var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果
    if (re.test(obj)) {
      alert('不全是数字');
    }
    else{
      alert('全是数字');
    };
  };
  allNumber(str);
  allNumber(str2);

};
</script>
<body>
</body>
</html>

(2)search

意義:正規去匹配字串,當匹配成功返回匹配成功的位置,反之,返回-1;和字符串處理方法中的indexof()函數一樣
語法:字串.search(re);
[color=Red]注意:正規中預設是區分大小寫的,要讓其不區分大小寫的就是加標識i;[/color]
例子,不區分大小寫的去正規符合字串中某個字元

<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6b567sdo23ujaloo932';
  function searchStr(obj){
    var re=/B/i;//定义正则对象匹配b字符,不区分大小写
    alert(obj.search(re));  
  };
  searchStr(str);
};
</script>
<body>
</body>
</html>

(3)match

意義:正規去匹配字串,當匹配成功返回匹配成功的數組,反之,返回Null
語法:字串.match(re);
[color=Red]注意:正規中預設是只要是匹配成功就立刻結束回傳對應的值,不會繼續比對。若想找全部就需要加表示g(全域匹配)[/color]
範例:匹配字串中的連續數字並將其存入一個數組中(連續的數字作為數組用的一項)

程式中的「 」是配對至少出現一次,為什麼要這樣做呢?
前面我們提過“正則中預設是只要是匹配成功就立刻結束返回相應的值”,那麼在字符串中匹配到一個數字時就會結束,將一個數字返回數組,這時候我們需要的是用g來讓它符合每一個元素。
有沒有發現連續的數字沒有確定的個數,用「 」就可以滿足動態的數字個數。

<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6b567sdo23ujaloo932';
  function searchStr1(obj){
    var re=/\d/;  
    return obj.match(re);
  };
  function searchStr2(obj){
    var re=/\d/g;  
    return obj.match(re);
  };
  function searchStr3(obj){
    var re=/\d\d/g;//全局匹配2位数  
    return obj.match(re);
  };
  function searchStr4(obj){
    var re=/\d+/g;  
    return obj.match(re);
  };
  console.log(searchStr1(str));
  console.log(searchStr2(str));
  console.log(searchStr3(str));
  console.log(searchStr4(str));

};
</script>
<body>
</body>
</html>

(4)replace

意義:正規去匹配字串,當匹配成功的字串被新的字串所取代
語法:字串.replace(re);
例:將字串中的所有的a都替換成b

<!DOCTYPE>
<html>
<head>
 <meta charset='utf-8'> 
 <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
 var str='daah6b5a7sdo23ujaloo932';
 function replaceStr(obj){
  var re=/a/g; //全局匹配a
  return obj.replace(re,'b');
 };
 console.log(replaceStr(str));
};
</script>
<body>
</body>
</html>

暫時寫到這裡後續跟新。 。 。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn