1. 程式人生 > >正則表達式——特殊符號及其意義

正則表達式——特殊符號及其意義

front 限定符 修飾 規則 art 所有 ble 編號 exp

1、非打印字符      
\cx 匹配由x指明的控制字符。 \cM:匹配一個control-M或回車符 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 ‘c’ 字符。
\f 匹配一個換頁符,等價於\x0c \cL    
\n 匹配一個換行符,等價於\x0a \cJ    
\r 匹配一個回車,等價於\x0d \cM    
\s 匹配一個任意空白字符,等價於[\f\n\r\t\v] ^\s*\s$:匹配開頭和結尾的空白字符  
\S 匹配一個任意非空白字符,等價於[^\f\n\r\t\v]    
\t 匹配一個制表符    
\v 匹配一個垂直制表符    
2、特殊字符      
() 標記一個子表達式的開始和結束位置,子表達式可獲取供以後使用 (\s*):匹配連續空格 var str = "abc sb b sa b sc abc sd";
var reg = /s([abc]+\b)/;
var arr = str.match(reg);
//arr = ("sb","sa","sc");
//臨時緩存區$1 = "b",$2 = "a",$3 = "c";
()會導致所有匹配存到一個臨時緩沖區,緩沖區編號為1-99,每個緩沖區都可以用\n(1<n<99的十進制數)來引用。
var reg2 = /s([abc]+\b)\s+\1\b/;//匹配s([abc]+\b)\s+b\b的字符串
var arr2 = str.match(reg);
//arr2 = ("sb b","sa b");
[] 定義一個匹配的字符串範圍 [ab]:匹配a或b號  
{} 一般用來表示匹配的長度 \s{3}:匹配三個空格  
* 匹配前面子表達式零次或多次 a*:匹配連續的一個或多個a  
+ 匹配前面子表達式一次或多次 a+:匹配連續的兩個或多個a  
. 匹配換行符以外的所有字符   要匹配換行符用[.\n]
? 匹配前面的子表達式零次或多次,或指明一個非貪婪限定字符   貪婪匹配:正則表達式趨向於匹配最大長度的字符串("aaaaa".match(/a*/);//aaaaa)
非貪婪匹配:匹配到結果就好了("aaaaa".match(/a*?/);//a)
?的四種用法:
1、匹配前面子表達式0/1次
2、指明非貪婪限定字符
*?、+?、??、{n}?、{n,}?、{n,m}?
3、原文符號,\?
4、不捕捉模式
(?……)
\ 將下一個字符標記為特殊字符或原意字符或者向後引用 \n:匹配換行符
\\:匹配\
\1:引用第一個緩存區
 
^ 匹配輸入字符的開始位置。在[]中使用,表示不接受改字符集合 ^[1-9][0-9]*{3}:不以0開頭的四位數字  
$ 匹配輸入字符的結尾的位置。如果設置了RegExp對象的Multitle屬性,則也匹配‘\n’或‘\r‘ [a-z]*a$:匹配以a結尾的字符串  
| 指明兩項之間的一個選擇 a|b:匹配a或b  
3、限定符      
{n} n是一個非負整數,匹配確定的n次 a{3}:匹配aaa  
{n,} n是一個非負整數,匹配至少n次 a{3,}:匹配aaa,aaaa,aaaaa……  
{n,m} n<m,匹配至少n次至多m次 a{2,3}匹配aa,aaa  
\b 單詞分界符 ll\b:匹配hell中的“ll”,但是不匹配hello中的“ll”  
\B 非單詞分界符序列 ll\B:不匹配hell中的“ll”,但匹配hello中的“ll”  
\A 總是能夠匹配帶搜索文本的起始位置    
\Z 標示在未指定任何模式下匹配的字符,通常是字符串的末尾位置,或者是在字符串末尾的換行符之前的位置    
\z 字匹配字符串的末尾,而不考慮任何換行符    
\G 當前匹配的起始位置    
4、預定義字符集      
\d 任意一個十進制數字,相當於[0-9]    
\D 任意一個非十進制數字    
\s 任意一個空白字符    
\S 任意一個非空白字符    
\w 任意一個單詞字符,相當於[a-zA-Z0-9]    
\W 任意一個非單詞字符    
   
5、修飾符      
i 忽略大小寫的模式(?i……,?-i……,?i:……) [a-z]i:等同於[a-zA-Z]  
M 多文本模式。即字符串內部有多個換行符時,影響“^”,“$”的匹配    
s 但文本模式。在此模式下,元字符“.”可以匹配換行符。其他模式規則則不能匹配換行符    
X 忽略空白字符    
6、捕獲分組      
(exp) 匹配exp,並捕獲文本到自動命名的組裏    
(?<name>exp) 匹配exp,並捕獲文本到名為name的分組裏    
(?:exp) 匹配exp,不補貨匹配的文本,也不給次分組匹配組號    
以下為零寬斷言      
(?=exp) 匹配exp前面的位置   "How are you doing".match(/(?<txt>.+(?=ing))/);txt = "How are you do";
(?<=exp) 匹配exp後面的位置    
(?=!exp) 匹配前面不是exp的位置    
(?<=!exp) 匹配後面不是exp的位置    
別人寫的教程 http://blog.csdn.net/baidu_31333625/article/details/72846270
常用正則表達式 https://c.runoob.com/front-end/854

正則表達式——特殊符號及其意義