溫故知新之javascript正則

2021-09-18 03:31:10 字數 4544 閱讀 6313

使用字面量,以斜槓表示開始和結束

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也無效,總是從第乙個位置開始

replacestr.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...