Regular Expression學習筆記

2022-08-27 20:42:14 字數 4737 閱讀 9224

var re = /a/;//簡寫

/.../裡不能為空,因為會誤以為是注釋;

var re = new regexp('a');

新建乙個regexp物件;和新建array物件,object物件一樣,有簡寫;

平時建議用簡寫,因為簡寫的效能更好;

但如果正規表示式裡有非類字串的型別(其實並不是字串,只能不知怎麼表述),則不能簡寫,因為/.../裡寫的只能類字串型別;

var arr = ;

var arr = new array();

var obj = {};

var obj = new object();

test()

test(): 正則去匹配字串,如果匹配成功就返回真,如果匹配失敗就返回假

語法:正則.test(字串)

var str = 'abcdef';

var re = /b/;

alert( re.test(str) ); //true

search()

search(): 正則去匹配字串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失敗就返回 -1,和indexof()差不多

語法:字串.search(正則)

正則預設是區分大小寫的;

如果不區分大小寫的話,需要在正則的最後加標識i

var str = 'abcdef';

var re = /b/i;

//var re = new regexp('b','i');

alert( str.search(re) );

match()

match(): 正則去匹配字串,如果匹配成功,就返回匹配成功的陣列,如果匹配不成功,就返回null

語法:`字串.match(正則)

正則預設匹配成功就會結束,不會繼續匹配

如果想全部查詢,就要加標識 g(全域性匹配)`

replace()

replace(): 正則去匹配字串,匹配成功的字元去替換成新的字串

語法:字串.replace(正則,新的字串)

第二個引數:可以是字串,也可以是乙個**函式

var str = 'aaa';

var re = /a+/g;

str = str.replace(re,function(str));

alert(str);

匹配子項

小括號 () (還有分組操作的意思)

把正則的整體叫做(母親)

第乙個小括號裡面的正則,叫做這個第乙個子項(母親的第乙個孩子),第二個小括號就是第二個子項

var str = '2013-6-7';

var re = /(\d+)(-)/g;

str = str.replace(re,function($0,$1,$2));

alert( str );

match()中也有匹配子項

var str = 'abc';

var re1 = /abc/;

var re2 = /(a)(b)(c)/;

alert( str.match(re1) ); //abc

alert( str.match(re2) ); //[abc,a,b,c]

//當match不加g的時候才可以獲取到子項的集合

字元類

一組相似的元素,用 中括號的整體代表乙個字元,如果想代表多個,則在後面加上乙個+

var str1 = 'abc';

var str2 = 'abdc';

var re1 = /a[bde]c/;//bde是或的關係

var re2 = /a[bde]+c/;//

alert( re1.test(str1) ); //true

alert( re1.test(str2) ); //false

alert( re2.test(str2) ); //true

排除 ^: 如果^寫在裡面的話,就代表排除的意思

裡面還可以寫乙個範圍,但是要從小到大;

var re = /a[a-z0-9a-z]c/;
常見元字元

.: 匹配除 "\n" 之外的任何單個字元。要匹配包括 '\n' 在內的任何字元,請使用像"(.|\n)"的模式。

^: 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,^ 也匹配 '\n' 或 '\r' 之後的位置

$: 匹配輸入字串的結束位置。如果設定了regexp 物件的 multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置

\s: 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]

\s: 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]

\d: 匹配乙個數字字元。等價於[0-9]

\d: 匹配乙個非數字字元。等價於[^0-9]

\w: 匹配包括下劃線的任何單詞字元。等價於[a-za-z0-9_]( 字母 ,數字,下劃線_ )

\w: 匹配任何非單詞字元。等價於[^a-za-z0-9_]

\b: 匹配乙個單詞邊界(起始,結束,空格),也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'

\b: 匹配非單詞邊界。'er\b' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

\r: 匹配乙個回車符。等價於\x0d\cm

\t: 匹配乙個製表符。等價於\x09\ci

\num: 匹配 num,其中 num 是乙個正整數。對第num個子項的引用。例如,'(.)\1' 匹配兩個連續的相同字元。

量詞類:

*: 匹配前面的子表示式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於

+: 匹配前面的子表示式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於

?: 匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於

: n 是乙個非負整數。匹配確定的 n 次。例如,'o' 不能匹配 "bob" 中的 'o',但是能匹配 "food" 中的兩個 o

: n 是乙個非負整數。至少匹配n 次。例如,'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'

: m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格

?: 當該字元緊跟在任何乙個其他限制符 (*, +, ?, , , ) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。例如,對於字串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。

匹配中文:[\u4e00-\u9fa5]

行首行尾空格:^\s*|\s*$

email:^\w+@[a-z0-9]+(\.[a-z]+)$

**:[a-za-z]+://[^\s]*

qq號:[1-9][0-9]

身份證:[1-9]\d|[1-9]\d|[1-9]\dx

可以把這些正則放到乙個空間裡,呼叫起來方便;

var re = /,

email : /[1-9]\d/,

...}需要時就調相應的正則:

re.qq.test(str);

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...

BroadcastReceiver學習筆記

需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...

CDISC SDTM SE domain 學習筆記

整理翻譯自 sdtm ig 3.2 www.cdisc.org sdtm se subject elements 鞏固每個subject的epochs和elements的起止時間點.se對於有多個 時期的試驗有著重要的用處 如crossover試驗 se包含乙個subject從乙個element進入...