目錄
- 一、JavaScript正則運算式
- 什么是正則運算式?
- 語法
- 使用字串方法
- search() 方法使用正則運算式
- search() 方法使用字串
- replace() 方法使用正則運算式
- replace() 方法使用字串
- 正則運算式修飾符
- 正則運算式模式
- 使用 RegExp 物件
- 使用 test()
- 使用 exec()
- 正則運算式表單驗證實體:
- 二、JavaScriptRegExp物件
- RegExp 物件
- 語法
- 修飾符
- 方括號
- 元字符
- 量詞
- RegExp 物件方法
- 支持正則運算式的 String 物件的方法
- RegExp 物件屬性
一、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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/122031.html
標籤:JavaScript
