使用字面量,以斜槓表示開始和結束
var regex = /\s+/g;
使用regexp
建構函式
var regex = new regexp('\s+','g');
差別上面兩種寫法是等價的,都新建了乙個正規表示式物件。它們的主要區別是,第一種方法在編譯時新建正規表示式,第二種方法在執行時新建正規表示式。考慮到書寫的便利和直觀,實際應用中,基本上都採用字面量的寫法。
一類是修飾符相關,返回乙個布林值,表示對應的修飾符是否設定
ignorecase:返回乙個布林值,指忽略大小寫,注意僅是忽略大小寫,並不忽略全半形,該屬性唯讀。
global:返回乙個布林值,進行全域性匹配,指匹配到目標串的結尾,該屬性唯讀。
multiline:返回乙個布林值,允許多行匹配,該屬性唯讀。
m修飾符表示多行模式(multiline),會修改^和$的行為。預設情況下(即不加m修飾符時),^和$匹配字串的開始處和結尾處,加上m修飾符以後,^和$還會匹配行首和行尾,即^和$會識別換行符(\n)。
/world$/.test('hello world\n') // false
/world$/m.test('hello world\n') // true
上面的**中,字串結尾處有乙個換行符。如果不加m修飾符,匹配不成功,因為字串的結尾不是「world」;加上以後,$可以匹配行尾。
/^b/m.test('a\nb') // true
上面**要求匹配行首的b,如果不加m修飾符,就相當於b只能處在字串的開始處。
另一類是與修飾符無關的屬性,主要是下面兩個
source:返回正規表示式的字串形式(不包括反斜槓),該屬性唯讀
正則物件的lastindex屬性不僅可讀,還可寫。一旦手動設定了lastindex的值,
就會從指定位置開始匹配。但是,這只在設定了g修飾符的情況下,才會有效。
test()
正則物件的test
方法返回乙個布林值,表示當前模式是否能匹配引數字串
reg.test(str)
如果正規表示式帶有g修飾符,則每一次test方法都從上一次結束的位置開始向後匹配。
var r = /\s+/g;
var s = 'a b c';
r.lastindex // 0
r.test(s) // true
r.lastindex // 2
r.test(s) // true
r.lastindex // 4
r.test(s) // false
exec()
正則物件的exec方法,可以返回匹配結果。如果發現匹配,就返回乙個陣列,成員是每乙個匹配成功的子字串,否則返回null。
如果正規表示式包含組匹配,則返回的陣列會包括多個成員。第乙個成員是整個匹配成功的結果,後面的成員就是圓括號對應的匹配成功的組。也就是說,第二個成員對應第乙個括號,第三個成員對應第二個括號,以此類推。整個陣列的length屬性等於組匹配的數量再加1
exec方法的返回陣列還包含以下兩個屬性:
var r = /a(b+)a/g;
var a1 = r.exec('_abbba_aba_');
a1 // ['abbba', 'bbb']
a1.index // 1
r.lastindex // 6
var a2 = r.exec('_abbba_aba_');
a2 // ['aba', 'b']
a2.index // 7
r.lastindex // 10
var a3 = r.exec('_abbba_aba_');
a3 // null
a3.index // typeerror: cannot read property 'index' of null
r.lastindex // 0
var a4 = r.exec('_abbba_aba_');
a4 // ['abbba', 'bbb']
a4.index // 1
r.lastindex // 6
當整個字串到達尾部,正則物件的lastindex屬性重置為0,意味著以後的匹配將從頭開始
match
字串物件的match方法對字串進行正則匹配,返回匹配結果。
如果正規表示式帶有g修飾符,則該方法與正則物件的exec方法行為不同,會一次性返回所有匹配
成功的結果。
設定正規表示式的lastindex屬性,對match方法無效,匹配總是從字串的第乙個字元開始。
search
字串物件的search方法,返回第乙個滿足條件的匹配結果在整個字串中的位置。如果沒有
任何匹配,則返回-1。
該方法會忽略g修飾符。設定lastindex也無效,總是從第乙個位置開始
replace
str.replace(search, replacement)
搜尋模式如果不加g修飾符,就替換第乙個匹配成功的值,否則替換所有匹配成功的值。
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/, 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb"
split
字串物件的split方法按照正則規則分割字串,返回乙個由分割後的各個部分組成的陣列。
`str.split(separator, [limit])`
該方法接受兩個引數,第乙個引數是分隔規則,第二個引數是返回陣列的最大成員數。
需要特別指出的是,正則匹配預設是貪婪匹配,也就是匹配盡可能多的字元
var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']
由於\d+採用貪婪匹配,直接把後面的0全部匹配了,結果0*只能匹配空字串了。
必須讓\d+採用非貪婪匹配(也就是盡可能少匹配),才能把後面的0匹配出來,如果想將貪婪模式改為非貪婪模式,可以在量詞符後面加乙個問號
切分字串
'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
利用g修飾符允許多次匹配的特點,可以用乙個迴圈完成全部匹配
var r = /a(b+)a/g;
var s = '_abbba_aba_';
while(true) link
//["abbba", "bbb"]
//["aba", "b"]
replace
的應用
replace方法的乙個應用,就是消除字串首尾兩端的空格。
var a = ' aa bb ';
a.replace(/^\s+|\s+$/g, '')
//"aa bb"
replace方法的第二個引數可以使用美元符號$,用來指代所替換的內容
'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
// "world hello"
replace方法的第二個引數還可以是乙個函式,將每乙個匹配內容替換為函式返回值
廖雪峰老師的教程
阮一峰老師的教程
溫故知新之VUE
要想開始vue專案,第一步是搭建專案,詳情參見 最近重新看下 vue,當初學的時候筆記記得亂七八糟,對於乙個剛接觸mvvm的人來說,網上的文件看的也是雲裡霧裡,很多東西用起來也是生搬硬套,今天看到一篇文章寫的特別透徹,對vue有了更深刻透徹的理解,對於新手可以快速掌握更好的理解 我自己也做了乙個小小...
溫故知新 ROWTYPE
rowtype 相當於資料庫表裡的一行資料記錄的變數型別。declare 定義乙個emp表裡的一行記錄的資料型別的變數 v emp emp rowtype begin 查詢的emp表裡的資料列必須與v emp的列順序以及個數保持一致 select empno,ename,job,mgr,hireda...
vue 溫故知新
v cloak指令 解決變數閃爍問題 v if isshow 是插入或刪除節點 v show isshow 是隱藏或顯示節點 v bind data m msg 或 data m msg 繫結屬性 v bind key v.id 繫結乙個資料唯一值,用於虛擬dom演算法,優化渲染效率 v on cl...