正則表達式

JavaScript RegExp 對象

RegExp 是正則表達式的縮寫
當您檢索某個文本時,可以使用一種模式來描述要檢索的內容。RegExp 就是這種模式
定義 RegExp
new 關鍵詞來定義 RegExp 對象
`var patt1=new RegExp("e");
RegExp 對象的方法
RegExp 對象有 3 個方法:test()、exec() 以及 compile()。
test()
test() 方法檢索字符串中的指定值。返回值是 true 或 false。

<script>
    var patt1=new RegExp("e");
    document.write(patt1.test('hello world!!!'))// 輸出結果:true
</script>

exec()
exec() 方法檢索字符串中的指定值。返回值是被找到的值。如果沒有發現匹配,則返回 null。

<script>
    var patt1=new RegExp("e");
    document.write(patt1.exec('hello world exit!!!'))// 輸出結果:e
</script>

RegExp第二個參數,"g",匹配全局匹配

        <script>
            var patt1=new RegExp("e","g");
            do{
                var result=patt1.exec('hello world exit!!!');
                document.write(result)
            }while(result!=null)
            //輸出結果:eenull
        </script>

compile()
compile() 方法用于改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個參數。

<script>
            var patt1=new RegExp("e","g");
            document.write(patt1.test('hello world !!! exit'))//輸出結果:true
            patt1.compile('a');//改變RegExp,相當于:patt1=new RegExp("a");
            document.write(patt1.test('hello world !!! exit'))//輸出結果:false 
        </script>

創建正則表達式

var r = /a/;

正則.test(字符串)

正則去匹配字符串,如果匹配成功就返回真,如果匹配失敗就返回假

var str = 'abcdef';
var re = /b/;

alert( re.test(str) );

轉義字符

^:匹配開始位置
$:匹配結束位置
\s : 空格 包括 tab 和 換行
\S : 非空格
\d : 數字
\D : 非數字
\w : 字符 ( 字母 ,數字,下劃線_ )單個字符 [a-zA-Z_0-9]
\W : 非字符
(大寫都是反義)
.:任意單個字符
*:可以匹配任意多次,0-n
+:至少匹配一次,1-n
{min,max}:匹配次數:min-max
? :問號 容許匹配一次,但非必須

[abc] a, b, or c (簡單類)
[^abc] 除了a、b或c之外的任意 字符(求反)
[a-zA-Z] a到z或A到Z ,包含(范圍)
[a-z-[bc]] a到z,除了b和c : [ad-z](減去)
[a-z-[m-p]] a到z,除了m到 p: [a-lq-z]
pl:判斷5-12位的qq號
/^\d{5-12}$/
例子: 判斷是否全為數字

var str = '374829348791';

var re = /\D/;

if( re.test(str) ){
    alert('不全是數字');
}
else{
    alert('全是數字');
}

字符串.search(正則)

正則去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失敗就返回 -1

var str = 'abcdef';

var re = /b/;

alert( str.search(re) );

正則中的默認 : 是區分大小寫的
如果不區分大小寫的話,在正則的最后加標識 i

var str = 'abcdef';

var re = /B/i;//ignore 忽略大小寫

alert( str.search(re) );

字符串.match(正則)

正則去匹配字符串,如果匹配成功,就返回匹配成功的數組,如果匹配不成功,就返回null

var str = 'haj123sdk54hask33dkhalsd879';

var re = /\d/;

alert( str.match(re) );

正則默認:正則匹配成功就會結束,不會繼續匹配
如果想全部查找,就要加標識 g(全局匹配)

var str = 'haj123sdk54hask33dkhalsd879';

var re = /\d/g;//global  全局

alert( str.match(re) );

查找連在一起的數字

var str = 'haj123sdk54hask33dkhalsd879';

var re = /\d\d/g;

alert( str.match(re) );//只會找到12 54 33 87

量詞 : 匹配不確定的位置
+ : 至少出現一次,連續的數組是一個值,沒有+號的話,每個值是單獨的

var str = 'haj123sdk54hask33dkhalsd879';

var re = /\d+/g;

alert( str.match(re) );
//返回結果 ["123", "54", "33", "879"]

字符串.replace(正則,新的字符串)

正則去匹配字符串,匹配成功的字符去替換成新的字符串

var str = 'aaa';
var re = /a+/g;

str = str.replace(re,'b');

alert(str);

例子:關鍵字過濾

//菲稱仁愛礁附近17艘中國船均在菲軍監視之下

//| : 或的意思

//replace : 第二個參數:可以是字符串,也可以是一個回調函數

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <textarea name="" id="before" cols="30" rows="10"></textarea>
    <textarea name="" id="after" cols="30" rows="10"></textarea>
    <button>過濾</button>
<script>
//菲稱仁愛礁附近17艘中國船均在菲軍監視之下
var before = document.querySelector('#before');
var after = document.querySelector('#after');
var button = document.querySelector('button');

button.onclick = function(){
    var str = before.value;
    var re = /菲稱|中國船|監視之下/g;

    str = str.replace(re, function(str){
        var result = '';
         
         for(var i=0;i<str.length;i++){
             result += '*';
         }
        return result;
    });
    after.value = str;

}

</script>
</body>
</html>

匹配子項 : 小括號 () (還有另外一個意思,分組操作)

把正則的整體叫做(母親)
然后把左邊第一個小括號里面的正則,叫做這個第一個子項(母親的第一個孩子)
第二個小括號就是第二個孩子

var str = '2013-6-7';

var re = /(\d+)(-)/g;

str = str.replace(re,function($0,$1,$2){
    //第一個參數:$0(母親),第二個參數 : $1(第一個孩子)
    //,第二個參數 : $1(第二個孩子)
    
    //alert( $2 );
    
    return $1 + '.';
    
});

alert( str );   //2013.6.7

字符類

一組相似的元素 [] 中括號的整體代表一個字符

var str = 'abc';

var re = /a[bde]c/;

alert( re.test(str) );

排除 : ^ 如果^寫在[]里面的話,就代表排除的意思

var str = 'afc';

var re = /a[^bde]c/;

alert( re.test(str) );
var str = 'abc';

var re = /a[a-z0-9A-Z]c/;

alert( re.test(str) );

例子:過濾標簽

替換前<br />
<textarea>
</textarea><br />
替換后<br />
<textarea>
</textarea><br />
<input type="button" value="確定" id="input1" />
<script>
window.onload = function(){
    var aT = document.getElementsByTagName('textarea');
    var oInput = document.getElementById('input1');
    
    //var re = /<\w+>/g;
    
    var re = /<[^>]+>/g;
    
    oInput.onclick = function(){
        
        aT[1].value = aT[0].value.replace(re,'');
        
    };
    
};
</script>

轉義字符

.  :  任意字符

\. : 真正的點

\b : 獨立的部分 ( 起始,結束,空格 )
\B : 非獨立的部分

//var str = 'one two';
var str = 'onetwo';

var re = /one\b/;

alert( re.test(str) );

量詞 : {}

{4,7} : 最少出現4次,最多出現7次
{4,} : 最少出現4次
{4} : 正好出現4次

  • : {1,}
    ? : {0,1} : 出現0次或者1次
  • : {0,} : 至少出現0次*/

例子:判斷是不是qq號

var re = /^[1-9]\d{4,11}$/;

郵箱:

var re = /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;

重復的子項

\1 : 重復的第一個子項
\2 : 重復的第二個子項

var str = 'abca';

var re = /(a)(b)(c)\2/;//表示重復第二個子項,即同:var re= /(a)(b)(c)(b)/;

alert( re.test(str) )

下面寫法的區別

var re = /\w\w/;  //c9
var re = /(\w)\1/; //cc 99

例子: 找重復項最多的字符和個數

//將字符串分割成數組
var str = 'assssjdssskssalsssdkjsssdss';
    //將字符串分割成數組
    var arr = str.split('');
    //在用數組的方法排序,然后用join方法還原字符串;
    str = arr.sort().join('');
    // alert(str);

    var value = '';
    var index = 0;

    var re = /(\w)\1+/g;//這里\1是指與上一個字符相同

str.replace(re,function($0,$1){
    
    //alert($0);
    
    if(index<$0.length){
        index = $0.length;
        value = $1;
    }
    
});

alert('最多的字符:'+value+',重復的次數:'+index);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容