正則是用來搜索字符串的!!!
正則是用來搜索字符串的!!!
正則是用來搜索字符串的!!!
重要的事兒說三遍,這個是這片文章的結論。javascript
javascript
Chrome Console
主要函數:str.match(regexp)
html
regexp
helloworld
字符串中搜索h
字符而已。array
null
,具體的結果視表達式的不一樣而有區別,如今講了也感覺不到。上面的例子中鍵0
的返回值就是搜索到的結果。正則寫法:java
//
:在兩個/
之間寫,推薦這種方式,這種方式下,兩個/
之間不能什麼都不寫,由於會發生很神奇的事情--會變成註釋符號,致使後面的語法錯誤...
推薦第一種
實用性技能的學習仍是從實際需求出發比較好,在字符串搜索的應用場景中,最多見的需求是啥?就是在字符串中搜索是否包含另外一個字符串
。jquery
例如在helloworld
中判斷是否有h
,或者是否有hello
,在這種狀況下,就使用全部爲的普通字符就行了,這種狀況下,就起到了和indexOf
同樣的功能,因此咱們如今咱們能夠用正則完成在字符串中搜索是否包含另外一個字符串
的需求了。正則表達式
可是若是正則只能作到這樣,那還不如直接用indexOf
,還學啥正則,在上面的栗子中,咱們所要搜索的字符串是已知的
、肯定的
,好比咱們知道咱們要搜索h
、hello
,這些都是已知的
、肯定的
,可是在不少場景中,咱們要搜索的是不肯定的
、只知足必定規則的
。因此就有了格式校驗
。api
格式校驗
一般出如今表單應用中,好比註冊須要填寫帳戶和密碼,而帳戶和密碼須要知足必定的條件,帳戶必須是郵箱、密碼必須6-16位字母和數字組合等。數組
這裏就出現了對不肯定的
、只知足必定規則的
的字符串的搜索,只要有搜索結果,則就校驗經過,無結果,校驗則不經過。函數
如何作到呢,那就是替代符
,替代符
能夠替代某一種類型的字符,好比數字、字母、回車、換行等等等。學習
替代符
的格式是普通字符前面加\
,好比\d
、\w
等,爲啥要加\
呢,由於不加\
就是普通字符了啊。spa
\d
說明:能夠完成需求:字符串中是否至少包含一個數字
,這裏的數字指的是:01234567890
\D
說明:能夠完成需求:字符串中是否徹底不包含數字
,這裏的數字指的是:01234567890
\w
說明:能夠完成的需求:字符串中是否至少包含一個字符
,這裏的字符指的是:1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz_
,或者0-9A-Za-z_
\W
說明:能夠完成的需求是:字符串是否徹底不包含字符
,這裏的字符指的是:1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz_
,或者0-9A-Za-z_
\n
:
說明:能夠完成的需求是:字符串是否包含至少一個換行符
\t
:
說明:能夠完成的需求是:字符串是否包含至少一個製表符
,這裏的製表符指的是按Tab
鍵產生的
說明:能夠完成的需求是:字符串是否包含至少一個空白字符
,這裏的空白字符指的是換行符
、空白符
、製表符
等
替代任意一個非空白字符:
能夠完成的需求是:`字符串是否徹底不包含空白字符`,這裏的空白字符指的是`換行符`、`空白符`、`製表符`等
匹配\n
以外的任何字符:.
將以上的幾種替換符結合起來,咱們就能夠完成一些比較有意思的事了,好比:
說明:栗子1返回null
說明校驗經過了,栗子2返回了搜索結果,說明存在非字符,因此校驗不經過。
雖然能夠作到這種程度,可是依舊不夠,好比咱們沒法限制長度,或者更精細的控制,好比郵箱格式的限制,匹配連續10000個0等。以abc100000@qq.com
爲例,能夠看出,郵箱的規則大概是
@
符號@
後面是一個域名。域名又有本身的規則:
.
.
後面以多個字母或者數字組成郵箱的格式校驗已經怎麼複雜了,更況且若是咱們要限定指定的幾個域名呢?因此任重而道遠啊,還得接下去學
咱們在0x002中已經能夠作到對數量的控制了,即/\d\d\d/
這種形式,可是這種形式是有問題的,若是咱們要匹配10000個0
呢,寫10000個/d
可不現實,因此這裏必須引入新的符號,那就是數量
。
*
說明:注意,這裏說的是表達式,目前先當作字符來理解,意思是匹配o
這個字符0次或者屢次
+
說明:匹配o
這個字符1次或者屢次
3 匹配字表達式0次或者1次:?
![clipboard.png](/img/bVbd8Cu) **說明**:匹配`o`這個字符0次或者1次
{n}
,n
爲次數
說明:匹配o
這個字符n
次
{n,}
,n
爲次數
說明:匹配o
這個字符至少n
次
{n,m}
,n
爲最少的次數,m
爲最多的次數o
這個字符 n-m
次到目前爲止,完成了普通字符
、替代符
、數量
,那咱們能夠作的事情可就多了,好比郵箱格式校驗
![clipboard.png](/img/bVbd8El) 可是,依舊存在問題,請看下面 ![clipboard.png](/img/bVbd8Ew) 咱們在郵箱前面和後面加了空白符和其餘符號,經過了校驗,這很明顯是咱們目前沒法解決的,繼續往下
^
:
$
:
gmail
和qq
登陸呢?還得往下啊![]
:abc
中的任意字符
說明:不包含abc
中的任意字符
[a-z]
:
說明:包含a-z0-9
|
說明:是否包含a
或者b
字表達式使用()
來表示,()
內爲一個總體。
直接上栗子:
說明:匹配gmail
或者qq
。
說明:其中:1是整個表達式/tel:(\d+)/
的結果,2是子表達式\d+
的結果
在正則中,全部的單個匹配都是子表達式,好比a
、a+
、a{n,m}
等。因此,其實這包含一種遞歸的思想,因此,全部使用在表達式上的均可以使用在這些之上,好比(ab)+
,能夠匹配ababab
。
正則表達式的做用就是
搜索字符串!!!
搜索字符串!!!
搜索字符串!!!
只不過能夠搜索不肯定的
、知足某種規則的
的字符串,而這個功能能夠引伸出多種使用場景