1 正則表達式
正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字符串來描述、匹配一系列符合某個句法規則的字符串搜索模式。
搜索模式可用於文本搜索和文本替換。
什么是正則表達式?
正則表達式是由一個字符序列形成的搜索模式。
當你在文本中搜索數據時,你可以用搜索模式來描述你要查詢的內容。
正則表達式可以是一個簡單的字符,或一個更復雜的模式。
正則表達式可用於所有文本搜索和文本替換的操作。
應用:表單的檢驗,文本搜索,爬取數據
語法
/正則表達式主體/修飾符(可選)
其中修飾符是可選的。
實例:
var patt = /sxt/i
實例解析:
/sxt/i 是一個正則表達式。
sxt 是一個正則表達式主體 (用於檢索)。
i 是一個修飾符 (搜索不區分大小寫)。
使用字符串方法
在 JavaScript 中,正則表達式通常用於兩個字符串方法 : search() 和 replace()。
search() 方法 用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串,並返回子串的起始位置。
replace() 方法 用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。
search() 方法使用正則表達式
實例
使用正則表達式搜索 "Runoob" 字符串,且不區分大小寫:
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
輸出結果為:6
search() 方法使用字符串
search 方法可使用字符串作為參數。字符串參數會轉換為正則表達式:
實例
檢索字符串中 "Runoob" 的子串:
var str = "Visit sxt!";
var n = str.search("sxt");
replace() 方法使用正則表達式
實例
使用正則表達式且不區分大小寫將字符串中的 Microsoft 替換為 sxt :
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"sxt");
結果輸出為:
Visit Runoob!
replace() 方法使用字符串
replace() 方法將接收字符串作為參數:
var str = document.getElementById("demo").innerHTML;
var txt = str.replace("Microsoft","Runoob");
注意:
正則表達式參數可用在以上方法中 (替代字符串參數)。
正則表達式使得搜索功能更加強大(如實例中不區分大小寫)。
正則表達式基礎知識
正則表達式修飾符
修飾符 可以在全局搜索中不區分大小寫:
修飾符 描述
i 執行對大小寫不敏感的匹配。
g 執行全局匹配(查找所有匹配而非在找到第一個匹配后停止)。
m 執行多行匹配。
正則表達式模式
方括號用於查找某個范圍內的字符:
表達式 描述
[abc] 查找方括號之間的任何字符。
[0-9] 查找任何從 0 至 9 的數字。
(x|y) 查找任何以 | 分隔的選項。
元字符是擁有特殊含義的字符:
元字符 描述
. 匹配除“\n”之外的任何單個字符。但是一般語言如果是多行都會自動將.可以匹配\n
^ 匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。
$ 匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。
\d 查找數字。
\s 查找空白字符。
\S 匹配任何非空白字符。等價於[^ \f\n\r\t\v]。
\b 匹配單詞邊界。
\w 匹配包括下划線的任何單詞字符。等價於“[A-Za-z0-9_]”。
\W 匹配任何非單詞字符。等價於“[^A-Za-z0-9_]”。
\d 匹配一個數字字符。等價於[0-9]。
\D 匹配一個非數字字符。等價於[^0-9]。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B 匹配非單詞邊界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
量詞
量詞 描述
n+ 匹配任何包含至少一個 n 的字符串。
n* 匹配任何包含零個或多個 n 的字符串。
n? 匹配任何包含零個或一個 n 的字符串。
? 當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串
N{11} 匹配任何包含11個N的字符串
{n} n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。
{n,} n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。
{n,m} m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o。“o{0,1}”等價於“o?”。請注意在逗號和兩個數之間不能有空格。
(pattern) 匹配pattern並獲取這一匹配。
使用 RegExp 對象
在 JavaScript 中,RegExp 對象是一個預定義了屬性和方法的正則表達式對象。
test()
test() 方法是一個正則表達式方法。
test() 方法用於檢測一個字符串是否匹配某個模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false。
以下實例用於搜索字符串中的字符 "e":
實例
var patt = /e/;
patt.test("The best things in life are free!");
字符串中含有 "e",所以該實例輸出為:true
你可以不用設置正則表達式的變量,以上兩行代碼可以合並為一行:
/e/.test("The best things in life are free!")
使用 exec()
exec() 方法是一個正則表達式方法。
exec() 方法用於檢索字符串中的正則表達式的匹配。
該函數返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。
以下實例用於搜索字符串中的字母 "e":
Example 1
/e/.exec("The best things in life are free!");
字符串中含有 "e",所以該實例輸出為:e
一、校驗數字的表達式
1. 數字: ^[0-9]*$
2. n位的數字:^\d{n}$
3. 至少n位的數字:^\d{n,}$
4. m-n位的數字:^\d{m,n}$
- 零和非零開頭的數字:^([0-9]*)$
二、校驗字符的表達式
1. 漢字:^[\u4e00-\u9fa5]{0,}$
2. 英文和數字:^[A-Za-z0-9]+$
3. 長度為3-20的所有字符:^.{3,20}$
4. 由26個英文字母組成的字符串:^[A-Za-z]+$
三、特殊需求表達式
1.域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\..*
2. InternetURL:[a-zA-z]+://[^\s]*
3.帳號是否合法(字母開頭,允許5-16字節,允許字母數字下划線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
4.騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
5. IP地址:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} (提取IP地址時有用)
