正則表達式-語法


正則表達式——語法

正則:就是用有限的符號,表達無限的序列。
兩條斜線中間是正則主體,這部分可以有很多字符組成; i部分是修飾符,i的意思是忽略大小寫。 eg: /^abc/i

簡單字符:
沒有特殊意義的字符都是簡單字符,簡單字符就代表自身,絕大部分字符都是簡單字符。eg:
/abc/ // 匹配 abc
/123/ // 匹配 123
/-_-/ // 匹配 -_-
/孩子/ // 匹配 孩子

轉義字符
\ 是轉義字符,其后面的字符代表不同的意思,轉義字符主要有三個作用:
第一種,是為了匹配不方便顯示的特殊字符,比如換行,tab符號等
第二種,正則中預先定義了一些代表特殊意義的字符,比如 \w 等
第三種,在正則中某些字符有特殊含義(如下面的),轉義字符可以讓其顯示自身含義

下面是常用轉移字符列表:
\n 匹配換行符
\r 匹配回車符
\t 匹配制表符,也就是 tab 鍵
\v 匹配垂直制表符
\x20 20是2位16進制數字,代表對應的字符
\u002B 002B是4位16進制數字,代表對應的字符
\w 匹配任何一個字母或者數字或者下划線
\W 匹配任何一個字母或者數字或者下划線以外的字符
\s 匹配空白字符,比如空格,tab等
\S 匹配非空白字符
\d 匹配數字字符,0-9
\D 匹配非數字字符
\b 匹配單詞的邊界
\B 匹配非單詞邊界
\\ 匹配 \ 本身

字符集合
有時候我們需要匹配一類字符,字符集可以實現這個功能,字符集的語法用 [] 分割:
[abc] // 匹配a或b或c

如果要表示字符很多,可以使用 - 表示一個范圍內的字符:
[0123456789]=[0-9]

在前面加個 ^,可表示非的意思,下面的代碼能夠匹配 a b c 之外的任意字符
[^abc]

其實正則還內置了一些字符集,在上面的轉義字符提到,下面給出內置字符集對應的自定義字符集
. 匹配除了換行符(\n)以外的任意一個字符 =[^\n]
\w = [0-9a-zA-Z_]
\W = [^0-9a-zA-Z_]
\s = [\t\n\v]
\S = [^\t\n\v]
\d = [0-9]
\D = [^0-9]

量詞
如果需要匹配多次某個字符,正則也提供了量詞的功能,正則中的量詞有多個,如 ? + * {n} {m, n} {m, }
{n} 匹配 n 次,eg:a{2}, 匹配 aa
{m, n} 匹配 m-n 次,優先匹配 n 次,比如 a{1,3},可以匹配 aaa, aa, a
{m,} 匹配 m 次以上,優先匹配 多次,比如 a{1,},可以匹配 aaaa……
? 匹配 0 次或 1 次,優先匹配1次,相當於 {0,1}
+ 匹配 1-n 次,優先匹配n次,相當於{1,}
* 匹配 0-n次,優先匹配n次,相當於{0,}
正則默認是遵從貪婪模式,凡是表示范圍的量詞,都優先匹配上限而不是下限
a{1,3} // 匹配字符串“aaa”的話,會匹配aaa而不是a
有時我們想要結果,可以在量詞后面加上?,就可以開啟非貪婪模式
a{1,3}? // 匹配字符串“aaa”的話,會匹配a而不是aaa

字符邊界
有時會有邊界匹配的要求,比如xxx開頭,以xxx結尾
^在[] 外表示匹配開頭的意思
^abc // 可以匹配abc,打不能匹配aabc
$表示匹配結尾的意思
abc$ // 可以匹配abc,但不能匹配abcc
\b表示單詞邊界
abc\b // 可以匹配abc,但不能匹配abcc

選擇表達式
有時我們想匹配x或y,如果x和y是單個字符,可以使用字符集,[abc]可以匹配a或b或c;
如果x和y是多個字符,字符集就無能為力了,此時要用到分組:
正則中用 | 來表示分組(或), a|b 表示匹配 a或者b的意思
123|456|789 // 匹配123 或 456 或 789

分組與引用
分組時正則中非常強大的一個功能,可以讓上面提到的量詞作用於一組字符,而非單個字符,分組的語法是圓括號包裹(XXX)
(abc){2} //匹配abcabc
分組不能放在[]中,分組中還可以使用選擇表達式
(123|456){2} // 匹配123123,456456,123456,456123

和分組相關的另一個概念是引用,比如在匹配html標簽時,通常希望<xxx></xxx>后面xxx能夠和前面保持一致
引用的語法是\數字,數字代表前面第幾個捕獲分組,注意非捕獲分組不能被引用
<([a-z]+)><\/\1> // 可以匹配‘<span></span>’或'<div></div>'等

預搜索
如果你想匹配xxx前不能是yyy,或者xxx后不能使yyy,js只能正向預搜索,也就是xxx后面必須是yyy,或者xxx不能是yyy
1(?=2) // 可以匹配12,不能匹配22
1(?!2) // 可以匹配22,不能匹配12

修飾符
默認正則是區分大小寫,/xxx/gi // 后面的g和i就是兩個修飾符
g 正則遇到第一個匹配的字符就會結束,加上全局修飾符,可以讓其匹配到結束
i 正則默認是區分大小寫的,i可以忽略大小寫
m 正則默認情況下,^和$只能匹配字符串的開始和結尾,m修飾符可以讓^和$匹配行首和行尾,eg:
/jing$/ // 能夠匹配 'yanhaijing’,不能匹配 'yanhaijing\n'
/jing$/m //能夠匹配‘yanhaijing’,能匹配 ‘yanhaijing\n’
/^jing/ //能夠匹配‘jing’,不能匹配‘\njing’
/^jing/m //能匹配‘jing’,能匹配‘\njing’

 

博客摘自:https://yanhaijing.com/javascript/2017/08/06/regexp-syntax/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM