正規表示式
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所...