1,\
斜槓用於轉義,在js正則裡,只有一些元字元(*,?,.等)和\本身需要轉義,其他的不需要轉義,如果其他的字元前面使用了\,可能會產生負面影響,比如\b,\t這些有特殊含義的轉義。
此外,在js正則中,\還有乙個用處在於使用new regexp()形式建立正則物件時,比如new regexp('a\*a'),其中*是乘以的意思,js引擎在解析該正規表示式字串時,會消耗掉這個斜槓,最後生成的是a*a,這時候我們要這樣寫'a\\*a'。
2 ^該元字元比較簡單,就是表示該正則是從字串的首字元開始匹配的,有乙個地方需要注意的是,如果該正規表示式加了m標記時,匹配到了行分隔符的時候就會結束。然後會在下一行繼續匹配。
'd\nd'.match(/^d/g) => ['d'], 'd\nd'.match(/^d/mg) => ["d", "d"]
3 $該元字元和^一樣,當含義$的正則匹配乙個字串時,他不是直接判斷該字串的結尾,而是以行結束符為分隔,對每一行的結尾進行匹配。
'd\nd'.match(/d$/g) => ['d'], 'd\nd'.match(/d$/mg) = > ["d", "d"]
4 * + ?
這三個元字元代表的是匹配0到多個同樣的字元組合,a*,a?,a+,分別代表匹配0到多個a,0到1個a,1到多個a。這是一種貪婪的匹配,也就是盡可能多地匹配後面符合條件的字元。
如果在這些元字元後面加上?,那麼就代表是非貪婪匹配,也就是盡可能少地匹配。和以上的情況類似,也可以在後面加?。
'ddd'.match(/d/) => ddd, 'ddd'.match(/d?/) => d。
5 .匹配除了行分隔符外的所有字元
6 捕獲分組(x) \n $n regexp.$n
()代表捕獲分組,x代表的表示式所匹配的內容可以在x所有的正則中或者其他地方使用。
/(x)(y)\1\2/.test('xyxy') =>
true
/(x)(y)\1\2/.test('xyyy') =>
false,\n代表的是第n個捕獲分組的值。
'xy'.replace(/(x)(y)/, "$1 and $2 ") => x and y, regexp.$1 = x, regexp.$2 = y,每次正則執行完後,捕獲分組或掛載到regexp物件上,並且清除上次執行的結果。
$&是乙個特殊的變數,他代表是整個正規表示式匹配到的結果。也就是xy。
7 (?:x)
非捕獲分組,也就是()中的表示式捕獲到分組不可在其他地方使用。'x'.replace
(/(?:x)/, "$1") =>
"$1"
8 x(?=y)
前向斷言,斷言x後面是y,但y不在捕獲分組中,'x'.match(/x(?=y+)/) =>
null, 'xyy'.match(/x(?=y+)/) => x
9 x(?!y)
同上,斷言x後面不是y。
10 [\b]
匹配(u+0008),鍵盤中的退格鍵。
11 \b
匹配單詞的邊界,如果匹配成功,匹配到內容的結果長度為0,單詞邊界的定義為,某乙個位置,後面或者前面沒有單詞字元,則是單詞邊界。其中單詞字元的定義為大小寫字母+數字+_。其餘的都為非單詞字元。
/a\b/.test('a~b') =>
true,~被視為單詞邊界。/a\b/.test('ab') =>
false
12 \b
分單詞邊界,定義類似\b。/a\b/.test('ab') =>
true, /b\b/.test('ab') =>
false,b的後面是'',屬於單詞邊界,所以是false。
13 \w
單詞字元,定義為[a-za-z0-9_]
14 \w
非單詞字元,定義為[^a-za-z0-9_]
15 \s
所有空格,如製表符、垂直分隔符、水平分隔符,定義為[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
16 \s
非空格符,定義為[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
17 sticky
粘著位類似於全域性匹配,當我們使用exec函式時,如果正規表示式中加了g,那麼就會下次執行exec函式時就會從上次匹配的結束位置開始。
同樣,我們可以通過加y標記來達到這個目的。
var x = /a/; x.exec('aa'), x.exec('aa'); lastindex為上次匹配的位置,lastindex為不會變,每次都匹配到第乙個a
var x = /a/g; x.exec('aa'), x.exec('aa'); lastindex會變,第n次匹配會匹配到第n個a
var x = /a/y; x.exec('aa'), x.exec('aa'); lastindex會變,第n次匹配會匹配到第n個a,粘著位其實就是說上次匹配的位置會粘著(記著)
18 使用new regexp()
動態生成正則時需要使用這種方式,但是需要對輸入進行轉義。需要對元字元進行修正,$&為每次匹配到的字元
function fix(str) ()|[\]\\]/g, '\\$&');
}
js正規表示式總結
常用字元代表含義 匹配除換行符以外的任意字元 匹配 字串的開頭,a 匹配 an a 而不匹配 an a 匹配 字串的結尾,a 匹配 an a 而不匹配 an a 匹配前面元字元0次或多次,ba 將匹配b,ba,baa,baaa 匹配前面元字元1次或多次,ba 將匹配ba,baa,baaa 匹配前面元...
js 正規表示式總結
正則也用了很多了,而真正自己寫的正則到真是寥寥無幾呀,不是貼上複製,就是貼上複製修改,有時候對於一些正則還不是很理解匹配的過程,覺得這作為程式設計師最基本的知識還是應該自己寫一下正則比較好,所以重新又看了一下正則,做一下記錄,以備以後自己複習和使用 正則主要是用於操作字串 驗證字串是不是合法 查詢符...
總結 js正規表示式
1.定義 正規表示式目的在於處理字串的查詢 驗證 修改 替換 var reg1 new regexp s g 建構函式的寫法 var reg2 s d?g 字面量寫法2.正規表示式方法 test 判斷字串是否存在符合正規表示式的子字串,存在返回true,反之返回false exec 返回乙個陣列,包...