關於正則方法的一點理解

2022-08-24 10:57:06 字數 2487 閱讀 1004

正規表示式

1、 元字元

元字元是正規表示式的基礎,比如\d--[0-9]數字字元,\d--[^0-9]非數字字元;還有轉義符\f--換頁,\n--換行;邊界^--字串起始位置,$--字串結束位置,量詞*--重複零次或更多 x>=0,+--重複一次或更多次 x>=1,?--重複零次或一次 x=(0||1)

n次x=n, 重複n次或更多 x>=n, 重複出現的次數比n多但比m少 n<=x<=m

2、正則方法

-> test

語法: .test( string ) -> boolean

判斷這個字串是否符合這個正規表示式

常用與驗證

-> exec

語法: .exec( string ) -> array

將匹配到的提取出來.

1> 單個字串提取

/e/.exec( 'abcdefg' ) -> [ 'e' ]

/h/.exec( 'abcdefg' ) -> null

2> 提取並解析( 常用 )

分組: 在 正規表示式中使用 () 可以將匹配的結果進行分組.

學會分組的編號.

1) 從左往右數 左圓括號 (

2) 依次從 1 開始給 圓括號編號

123 4 5 6

/(((.)(.))(.)(.))/

使用 exec 方法返回的是乙個陣列. 在匹配的結果中, 匹配到的字串是陣列的 第 0 個元素.

其中的每一組對應於陣列的每一項.

var r = /(((.)(.))(.)(.))/;

var str = 'abcd';

r.exec( str );

// [ 0 ]: 匹配到的結果: 'abcd'

// [ 1 ]: 匹配到的第1組: 'abcd'

// [ 2 ]: 匹配到的第2組: 'ab'

// [ 3 ]: 匹配到的第3組: 'a'

// ...

array[7]=

對路徑的解析:

/.:.*\\.+\..+/

例如: c:\windows\system32\1.***

.代表任意字元(c盤) : 對應碟符冒號 .*0次或多次 盡量多的匹配(貪婪模式) 所以從後面開始看

.+1次或多次 再往前\.轉移字元.對應.***的"." 所以最後的.+對應***

再往前.+ 1次或多次 再往前\\轉移字元\ 對應\1.***的"\",所以 .+對應1

最後中間的\windows\system32都屬於.*

// 貪婪模式, 所有 +, * 這類元字元都是盡可能多匹配

/(.+)(.+)(.+)/

/(.+)(.+)(.+)/.exec('abcdef')結果是

array[4]=

/(.+)(.+)(.+)/.exec('abcdef')[1]----"abcd"

// 取消貪婪使用 ?

/(.+?)(.+)(.+)/

/(.+?)(.+)(.+)/.exec('abcdef')結果是

array[4]=

/(.+)(.+)(.+)/.exec('abcdef')[1]----"a"

3> 迴圈提取所有

'abcdefgedgedg' // 將其中所有的 e 取出來

操作:1) 在正規表示式中啟用全域性模式: /..../g, new regexp( '...', 'g' )

2) 呼叫一次 exec 方法, 獲取乙個匹配項

3) 再次呼叫 exec 方法, 獲得下乙個匹配項

4) 如此往復, 沒有匹配項的是否返回 null, 再次呼叫 exec 則匹配返回第乙個匹配項

var m;

while ( ( m = r.exec( str ) ) != null )

-> replace

找出匹配項替換掉

a、簡單的替換:

'adcde'.replace(/[a-z]/g,-)------"ad-de"

b、帶**函式的替換

'abcdefg'.replace(/[a-z]/g,function(str))----"abcdefg"

在這裡也可以用分組的思想解決部分難題:比如將'abc-def-ghi-jk'轉換為'abcdefghijk';

我們需要去掉'-'還需要將之後的第乙個字母變為大寫;那我們可以這樣

'abc-def-ghi-jk'.replace(/-(.)/g,function(_,num1))---"abcdefghijk"

這裡引數和上面exec方法中的分組一樣,"_"代表匹配的結果(由於不需要所有給_),num1代表匹配到第一組,而且裡面只有乙個組(.)橫線後的任意字母,返回值將字母轉換為大寫即可;

再看看,如果同樣的字串我們需要把橫線後第二個字母改為下劃線"_",我們可以這樣

'abc-def-ghi-jk'.replace(/(-.)(.)/g,'$1_')----"abc-d_f-g_i-j_"

在這裡有需要注意的"$1"表示匹配到的第乙個組,"$2"表示匹配到的第二個組;

關於malloc的一點理解

在函式中使用malloc,如果是大的記憶體分配,而且malloc與free的次數也不是特別頻繁,使用malloc與free是比較合適的,但是如果記憶體分配比較小,而且次數特別頻繁,那麼使用malloc與free就有些不太合適了。因為過多的malloc與free容易造成記憶體碎片,致使可使用的堆記憶體...

關於HTTPS的一點理解

通訊使用明文 不加密 內容可能會被竊聽。不驗證通訊方的身份,因此有可能遭遇偽裝。無法證明報文的完整性,所以有可能已經遭到篡改。https http 認證 加密 完整性保護 https是與ssl 安全套接層 組合使用的http協議 http secure 使用ssl之後,請求則變成先和ssl通訊,ss...

關於Action的一點理解

之前學習jsp,就是從網上找些jsp例項 然後模仿,再加工成自己想要的,這樣一來,好多東西都是學了一點皮毛,例如action。下面是在看書時所知道的,看完後,有種頓悟的感覺。action的主要功能是生成頁面顯示所需要的資料,頁面則負責顯示action中的所設定的資料。頁面中的標籤在獲得action所...