JavaScript中正則表達式常見使用函數

最近越來越感覺到正則表達式的強大,可以簡化很多代碼。並且正則表達式入門並不是很難。簡單列一下JavaScript中使用正則表達式的一些方法。

//定義幾個會用到的變量
var href = 'baidu.com?where=b5s&a=b';
var regObj = /(\w+)=(\w+)/;
//全局搜索
var regObj1 = /(\w+)=(\w+)/g;

正則對象上的方法

1.regObj.test();
  • 返回true或false
regObj.test(href);//true
2.regObj.exec();
  • 每運行一次返回一組結果。
  • 如果是非全局搜索,每次運行都返回第一組結果。全局搜索,每次返回一組結果,是在上一次匹配的位置後開始匹配的。regObj的lastIndex屬性會修改。當你對一個字符串進行搜索時,如果用它去搜索新的字符串,lastIndex會先設置爲0。再切回來又會從0開始。
  • 匹配不到返回null,且將lastIndex屬性設爲0;
  • 每組的結果是一個數組,注意這個雖然是數組,但它是包含鍵值對屬性的,可以打印下它的的length看看。[ ‘where=b5s’, ‘where’, ‘b5s’, index: 10, input: ‘baidu.com?where=b5s&a=b’ ];分別是[‘整個正則中匹配的字符’,’第一正則分組匹配的字符’,’第二正則分組匹配的字符’,index:’匹配處的起始位置’,input:’整個原始字符串’];
console.log(regObj1.exec(href));//[ 'where=b5s', 'where', 'b5s', index: 10, input: 'baidu.com?where=b5s&a=b' ]
console.log(regObj1.lastIndex);//19
console.log(regObj1.exec(href));//[ 'a=b', 'a', 'b', index: 20, input: 'baidu.com?where=b5s&a=b' ]

字符串方法

1.search
  • 返回第一組匹配的索引。
href.search(regObj1);//10
href.search('a');//1
href.search('abcd');//-1匹配不到
2.match
  • 返回匹配的值的數組或null。
href.match('123');//null
href.match(regObj1);//[ 'where=b5s', 'a=b' ]
3.split
  • 將字符串分割成數組。中間的分隔符也可以用正則表達式。用在可能有多種分割符的情況
var splitRegObj = /&|\?/;//以&或?分割
href.split(splitRegObj);//[ 'baidu.com', 'where=b5s', 'a=b' ];
4.replace
  • 直接正則替換。
var res = href.replace(/a|c/,'aaaa');//b__idu.com?where=b5s&a=b 單個替換
var res = href.replace(/a|c/g,'aaaa');//b__idu.__om?where=b5s&__=b 全局替換
var res = href.replace(/(a|c)/g,'$1-$1');//ba-aidu.c-com?where=b5s&a-a=b 對正則分組的反向引用替換
  • 傳入函數替換。
var res = href.replace(regObj1,function(){   
    return 123
});//baidu.com?123&123
  • 它的replace傳入的函數的每個參數的值分別是:每次匹配的字符串;正則第一分組匹配;正則第二分組匹配;……正則第N分組匹配;匹配的初始位置;原始輸入值。
var res = href.replace(regObj1,function(match,$1,$2,index,input){ 
    console.log(arguments); //{ '0': 'where=b5s', '1': 'where', '2': 'b5s', '3': 10, '4': 'baidu.com?where=b5s&a=b' };    
});//baidu.com?undefined&undefined  這裏沒給返回值。
  • 其實replace是很強大的一個方法。感覺要全部匹配並對正則分組有一些操作的話比上面的regObj.exec()用起來要方便。比如我們要解析這個url中所有的搜索條件以鍵值對的形式存入一個對象中。可以這樣操作。
var obj = {};
href.replace(regObj1,function(match,$1,$2){
    obj[$1] = $2;
    return match;//返回匹配的值,即不會修改原始的字符串
})
console.log(obj);//{ where: 'b5s', a: 'b' }

其它關鍵詞

  • 正則表達式與編輯器(如Sublime Text)的搭配使用。

同步發表於:https://github.com/liusaint/JavaScript-record/issues/3

發佈了72 篇原創文章 · 獲贊 109 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章