[TOC] 一、JavaScript正則表達式 正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字元串來描述、匹配一系列符合某個句法規則的字元串搜索模式。 搜索模式可用於文本搜索和文本替換。 什麼是正則表達式? 正則表達式是由一個字元序 ...
目錄
一、JavaScript正則表達式
正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字元串來描述、匹配一系列符合某個句法規則的字元串搜索模式。
搜索模式可用於文本搜索和文本替換。
什麼是正則表達式?
正則表達式是由一個字元序列形成的搜索模式。
當你在文本中搜索數據時,你可以用搜索模式來描述你要查詢的內容。
正則表達式可以是一個簡單的字元,或一個更複雜的模式。
正則表達式可用於所有文本搜索和文本替換的操作。
語法
/正則表達式主體/修飾符(可選)
其中修飾符是可選的。
實例:
var patt = /runoob/i
實例解析:
/runoob/i 是一個正則表達式。
runoob 是一個正則表達式主體(用於檢索)。
i 是一個修飾符(搜索不區分大小寫)。
使用字元串方法
在 JavaScript 中,正則表達式通常用於兩個字元串方法 : search() 和 replace()。
search() 方法用於檢索字元串中指定的子字元串,或檢索與正則表達式相匹配的子字元串,並返回子串的起始位置。
replace() 方法用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串。
search() 方法使用正則表達式
實例:使用正則表達式搜索 "Runoob" 字元串,且不區分大小寫:
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
console.log(n );//輸出結果為:6
search() 方法使用字元串
search 方法可使用字元串作為參數。字元串參數會轉換為正則表達式:
實例:檢索字元串中 "Runoob" 的子串:
var str = "Visit Runoob!";
var n = str.search("Runoob");
console.log(n );//輸出結果為:6
replace() 方法使用正則表達式
實例:使用正則表達式且不區分大小寫將字元串中的 Microsoft 替換為 Runoob :
var str = 'Visit Microsoft!';
var txt = str.replace(/microsoft/i,"Runoob");
console.log(txt);//結果輸出為:Visit Runoob!
你註意到了嗎?
正則表達式參數可用在以上方法中 (替代字元串參數)。正則表達式使得搜索功能更加強大(如實例中不區分大小寫)。
replace() 方法使用字元串
實例:replace() 方法將接收字元串作為參數:
var str = 'Visit Microsoft!';
var txt = str.replace("Microsoft","Runoob");
console.log(txt);//結果輸出為:Visit Runoob!
正則表達式修飾符
修飾符可以在全局搜索中不區分大小寫:
修飾符 | 描述 |
---|---|
i |
執行對大小寫不敏感的匹配。 |
g |
執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。 |
m |
執行多行匹配。 |
正則表達式模式
方括弧用於查找某個範圍內的字元:
表達式 | 描述 |
---|---|
[abc] |
查找方括弧之間的任何字元。 |
[0-9] |
查找任何從 0 至 9 的數字。 |
(x|y) |
查找任何以 |
元字元是擁有特殊含義的字元:
元字元 | 描述 |
---|---|
\d |
查找數字。 |
\s |
查找空白字元。 |
\b |
匹配單詞邊界。 |
\uxxxx |
查找以十六進位數 xxxx 規定的 Unicode 字元。 |
量詞:
量詞 | 描述 |
---|---|
n+ |
匹配任何包含至少一個n的字元串。 |
n* |
匹配任何包含零個或多個n的字元串。 |
n? |
匹配任何包含零個或一個n的字元串。 |
使用 RegExp 對象
在 JavaScript 中,RegExp 對象是一個預定義了屬性和方法的正則表達式對象。
使用 test()
test() 方法是一個正則表達式方法。
test() 方法用於檢測一個字元串是否匹配某個模式,如果字元串中含有匹配的文本,則返回 true,否則返回 false。
以下實例用於搜索字元串中的字元 "e":
實例:
var patt = /e/;
var res = patt.test("The best things in life are free!");
console.log(res );//字元串中含有 "e",所以該實例輸出為:true
你可以不用設置正則表達式的變數,以上兩行代碼可以合併為一行:
/e/.test("The best things in life are free!")
使用 exec()
exec() 方法是一個正則表達式方法。
exec() 方法用於檢索字元串中的正則表達式的匹配。
該函數返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。
以下實例用於搜索字元串中的字母 "e":
實例:
var res = /e/.exec("The best things in life are free!");
console.log(res? res[0] : res);//字元串中含有 "e",所以該實例輸出為:e
正則表達式表單驗證實例:
/*是否帶有小數*/
function isDecimal(strValue ) {
var objRegExp= /^\d+\.\d+$/;
return objRegExp.test(strValue);
}
/*校驗是否中文名稱組成 */
function ischina(str) {
var reg=/^[\u4E00-\u9FA5]{2,4}$/; /*定義驗證表達式*/
return reg.test(str); /*進行驗證*/
}
/*校驗是否全由8位數字組成 */
function isStudentNo(str) {
var reg=/^[0-9]{8}$/; /*定義驗證表達式*/
return reg.test(str); /*進行驗證*/
}
/*校驗電話碼格式 */
function isTelCode(str) {
var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
return reg.test(str);
}
/*校驗郵件地址是否合法 */
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
二、JavaScriptRegExp對象
RegExp 對象
正則表達式是描述字元模式的對象。
正則表達式用於對字元串模式匹配及檢索替換,是對字元串執行模式匹配的強大工具。
語法
var patt=new RegExp(pattern,modifiers);
或者更簡單的方式:
var patt=/pattern/modifiers;
- pattern(模式) 描述了表達式的模式
- modifiers(修飾符) 用於指定全局匹配、區分大小寫的匹配和多行匹配
註意: 當使用構造函數創造正則對象時,需要常規的字元轉義規則(在前面加反斜杠 \
)。比如,以下是等價的:
var re = new RegExp("\\w+");
var re = /\w+/;
修飾符
修飾符用於執行區分大小寫和全局匹配:
修飾符 | 描述 |
---|---|
i |
執行對大小寫不敏感的匹配。 |
g |
執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。 |
m |
執行多行匹配。 |
方括弧
方括弧用於查找某個範圍內的字元:
表達式 | 描述 |
---|---|
[abc] |
查找方括弧之間的任何字元。 |
[^abc] |
查找任何不在方括弧之間的字元。 |
[0-9] |
查找任何從 0 至 9 的數字。 |
[a-z] |
查找任何從小寫 a 到小寫 z 的字元。 |
[A-Z] |
查找任何從大寫 A 到大寫 Z 的字元。 |
[A-z] |
查找任何從大寫 A 到小寫 z 的字元。 |
[adgk] |
查找給定集合內的任何字元。 |
[^adgk] |
查找給定集合外的任何字元。 |
(red|blue|green) |
查找任何指定的選項。 |
元字元
元字元(Metacharacter)是擁有特殊含義的字元:
元字元 | 描述 |
---|---|
. |
查找單個字元,除了換行和行結束符。 |
\w |
查找單詞字元。 |
\W |
查找非單詞字元。 |
\d |
查找數字。 |
\D |
查找非數字字元。 |
\s |
查找空白字元。 |
\S |
查找非空白字元。 |
\b |
匹配單詞邊界。 |
\B |
匹配非單詞邊界。 |
\0 |
查找 NULL 字元。 |
\n |
查找換行符。 |
\f |
查找換頁符。 |
\r |
查找回車符。 |
\t |
查找製表符。 |
\v |
查找垂直製表符。 |
\xxx |
查找以八進位數 xxx 規定的字元。 |
\xdd |
查找以十六進位數 dd 規定的字元。 |
\uxxxx |
查找以十六進位數 xxxx 規定的 Unicode 字元。 |
量詞
量詞 | 描述 |
---|---|
n+ |
匹配任何包含至少一個 n 的字元串。 例如: /a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 |
n* |
匹配任何包含零個或多個 n 的字元串。 例如, /bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
n? |
匹配任何包含零個或一個 n 的字元串。 例如, /e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 |
n{X} |
匹配包含 X 個 n 的序列的字元串。 例如, /a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的兩個 "a",且匹配 "caaandy." 中的前兩個 "a"。 |
n{X,} |
X 是一個正整數。前面的模式 n 連續出現至少 X 次時匹配。 例如, /a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
n{X,Y} |
X 和 Y 為正整數。前面的模式 n 連續出現至少 X 次,至多 Y 次時匹配。 例如, /a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的兩個 "a",匹配 "caaaaaaandy" 中的前面三個 "a"。註意,當匹配 "caaaaaaandy" 時,即使原始字元串擁有更多的 "a",匹配項也是 "aaa"。 |
n$ |
匹配任何結尾為 n 的字元串。 |
^n |
匹配任何開頭為 n 的字元串。 |
?=n |
匹配任何其後緊接指定字元串 n 的字元串。 |
?!n |
匹配任何其後沒有緊接指定字元串 n 的字元串。 |
RegExp 對象方法
方法 | 描述 |
---|---|
compile |
在 1.5 版本中已廢棄。編譯正則表達式。 |
exec |
檢索字元串中指定的值。返回找到的值,並確定其位置。 |
test |
檢索字元串中指定的值。返回 true 或 false。 |
toString |
返回正則表達式的字元串。 |
支持正則表達式的 String 對象的方法
方法 | 描述 | FF | IE |
---|---|---|---|
search |
檢索與正則表達式相匹配的值。 | 1 | 4 |
match |
找到一個或多個正則表達式的匹配。 | 1 | 4 |
replace |
替換與正則表達式匹配的子串。 | 1 | 4 |
split |
把字元串分割為字元串數組。 | 1 | 4 |
RegExp 對象屬性
屬性 | 描述 |
---|---|
constructor |
返回一個函數,該函數是一個創建 RegExp 對象的原型。 |
global |
判斷是否設置了 "g" 修飾符 |
ignoreCase |
判斷是否設置了 "i" 修飾符 |
lastIndex |
用於規定下次匹配的起始位置 |
multiline |
判斷是否設置了 "m" 修飾符 |
source |
返回正則表達式的匹配模式 |
參考鏈接:
https://www.runoob.com/js/js-regexp.html
https://www.runoob.com/jsref/jsref-obj-regexp.html