前言:正則表達式時處理字符串中經常使用的手法,本文以簡單的方式,快速展現了JavaScript中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。我的總結,若有錯誤,還望指正,面試
字面量法正則表達式
var patt = /w+/i;數組
RegExp對象法函數
(1)var patt = new RegExp('/w+/i'); this
(2)var patt = new RegExp('w+','i');prototype
其中第二個變量表示修飾符,在ES5中,(1)方法不容許加第二個變量,ES6中則容許,且後面的修飾符會覆蓋原修飾符。code
i:忽視大小寫
g:全局匹配
m:多行匹配
u:用於處理大於uFFFF的字符(ES6新增)
y:相似g,可是有粘連特色(ES6新增)對象
一、reg.stickyip
用於檢測是否設置y修飾符,返回true/false(ES6新增)字符串
二、reg.source
返回表達式正文(ES5)
三、reg.flags
返回修飾符(ES6新增)
基礎量詞
? (0或1)
* (0個及以上)
+ (1個及以上)
開頭結尾
^ 開頭
$ 結尾
指定量詞
{x} 指定數量
{x,} 大於X數量
{x,y} x,y之間
特殊
?=str 後面緊接str的
?!str 後面沒有緊接str的
一、compile方法
patt.compile(newPatt)
用於編譯正則,或者改變正則內容
二、exec方法
patt.exec(str)
若是找到了,返回相應的字符串,若是沒有,返回null
三、test方法
patt.test(str)
若是找到了,返回true,不然返回false
一、search()
str.search(patt)
若是找到了,返回起始位置,不然返回-1
二、match()
str.match(patt)
返回一個數組,沒有找到返回null
三、replace()
str.replace(patt, newValue)
替換指定的內容
四、split()
str.split('patt')
以指定內容分割爲數組
var checkEmail = function(email) { var patt = /^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/i return patt.test(email); } //另外一種寫法 /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g) }
function commafy(num) { return num && num.toString() .replace(/(\d)(?=(\d{3})+\.)/g, x => x + ','); }
題目簡析:首先是&&,短路運算符,也就是至關於if...else,當num存在時,會返回後面的值。接下來是正則部分,注意?=後面的並不匹配,也就是好比12345678.9,實際匹配的值是2和5,在2和5後面加上',',就完成了預期。