正則

正則表達式構成
大部分字符在正則表達式中,就是字面的含義,比如/a/匹配a,/b/匹配b。如果在正則表達式之中,某個字符只表示它字面的含義(就像前面的a和b),那麼它們就叫做“字面量字符”。

/dog/.test('old dog') // true

上面代碼中正則表達式的dog,就是字面量字符,所以/dog/匹配old dog,因爲它就表示d、o、g三個字母連在一起。
除了字面量字符以外,還有一部分字符有特殊含義,不代表字面的意思。它們叫做“元字符”,主要有以下幾個
正則表達式是由普通字符(例如字符a到z)以及特殊字符(稱爲元字符)組成的文字模式。正則表達式作爲一個模板,將某個字符模式與所搜索的字符串進行匹配。
元字符—限定符
限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。
*:匹配前面的子表達式零次或多次。
+:匹配前面的子表達式一次或多次。
?:匹配前面的子表達式零次或一次。
{n}:匹配確定n次。
{n,}:至少匹配n次。
{n, m}:最少匹配n次且最多匹配m次。

// t 出現0次或1次
/t?est/.test('test') // true
/t?est/.test('est') // true
// t 出現1次或多次
/t+est/.test('test') // true
/t+est/.test('ttest') // true
/t+est/.test('est') // false
// t 出現0次或多次
/t*est/.test('test') // true
/t*est/.test('ttest') // true
/t*est/.test('tttest') // true
/t*est/.test('est') // true
/lo{2}k/.test('look') // true
/lo{2,5}k/.test('looook') // true
//上面代碼中,第一個模式指定o連續出現2次,第二個模式指定o連續出現2次到5次之間

元字符—字符匹配符:
字符匹配符用於匹配某個或某些字符。
[xyz]:字符集合。匹配所包含的任意一個字符。

/[abc]/.test('hello world') // false
/[abc]/.test('apple') // true
//上面代碼中,字符串hello world不包含a、b、c這三個字母中的任一個,所以返回false;字符串apple包含字母a,所以返回true

[^xyz]: 表示除了x、y、z之外都可以匹配

/[^abc]/.test('hello world') // true
/[^abc]/.test('bbc') // false
//上面代碼中,字符串hello world不包含字母a、b、c中的任一個,所以返回true;字符串bbc不包含a、b、c以外的字母,所以返回false。

[a-z]:字符範圍。匹配指定範圍內的任意字符。
[abc]可以寫成[a-c],[0123456789]可以寫成[0-9],同理[A-Z]表示26個大寫字母。

[a-z]/.test('b') // true

這樣也可以:[0-9]、[0-9a-z]、[0-9a-zA-Z]
[0-9a-zA-Z] 表示數字0-9,大小字母

[^a-z]:表示不包含小寫字母。

\d 匹配0-9之間的任一數字,相當於[0-9]。
\D 匹配所有0-9以外的字符,相當於[^0-9]。
\w 匹配任意的字母、數字和下劃線,相當於[A-Za-z0-9_]。
\W 除所有字母、數字和下劃線以外的字符,相當於[^A-Za-z0-9_]。
\s 匹配空格(包括換行符、製表符、空格符等)。
\S 匹配非空格的字符。
.:匹配除”\n”之外的任何單個字符。
元字符—定位符:
定位符可以將一個正則表達式固定在一行的開始或結束。也可以創建只在單詞內或只在單詞的開始或結尾處出現的正則表達式。
^:匹配輸入字符串的開始位置。
$:匹配輸入字符串的結束位置。

// test必須出現在開始位置/^test/.test('test123') // true
// test必須出現在結束位置/test$/.test('new test') // true
// 從開始位置到結束位置只有test/^test$/.test('test') // true
/^test$/.test('test test') // false

元字符—轉義符:
\:用於匹配某些特殊字符。
正則表達式中那些有特殊含義的元字符,如果要匹配它們本身,就需要在它們前面要加上反斜槓。比如要匹配+,就要寫成+。

/1+1/.test('1+1')// false
/1\+1/.test('1+1')// true
//上面代碼中,第一個正則表達式之所以不匹配,因爲加號是元字符,不代表自身。第二個正則表達式使用反斜槓對加號轉義,就能匹配成功。

元字符—選擇匹配符:
|:可以匹配多個規則。
豎線符號(|)在正則表達式中表示“或關係”(OR),即cat|dog表示匹配cat或dog。

/11|22/.test('911') // true
//上面代碼中,正則表達式指定必須匹配11或22

// 匹配fred、barney、betty之中的一個
/fred|barney|betty/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章