正則表達式字符含意義
正則表達式(Regular Expression,簡稱為Regex或RegExp)是用于匹配和搜索文本模式的工具。它是一個強大且靈活的字符串處理工具,可以用來檢查一個字符串是否符合特定的模式,或者從一個文本中提取滿足條件的部分。
在正則表達式中,可以使用不同的元字符和特殊符號來定義模式。以下是一些常見的正則表達式元字符和它們的含義:
-
.
:匹配任意字符,除了換行符。 -
*
:匹配前面的元素零次或多次。 -
+
:匹配前面的元素一次或多次。 -
?
:匹配前面的元素零次或一次。 -
^
:匹配字符串的開始位置。 -
$
:匹配字符串的結束位置。 -
[]
:定義字符集,匹配括號內(nèi)的任意一個字符。 -
|
:表示邏輯“或”,匹配兩個或多個表達式之一。 -
()
:分組,將表達式組合為一個子表達式,可以使用|
和量詞對整個組進行操作。
用法
當談到正則表達式時,還有一些其他重要的概念和用法需要了解: -
字符類和量詞: 在正則表達式中,使用方括號
[]
來定義字符類,它可以匹配方括號內(nèi)的任意一個字符。例如,[aeiou]
匹配任何一個元音字母。使用花括號{}
可以指定匹配的次數(shù),例如,a{2,4}
匹配連續(xù)兩到四個字母a
。 -
預定義字符類: 正則表達式提供了一些預定義的字符類,例如,
\d
匹配任意一個數(shù)字,\w
匹配任意一個字母或數(shù)字,\s
匹配任意一個空白字符。 -
轉義字符: 反斜杠
\
是正則表達式的轉義字符,用于轉義特殊字符,使其失去特殊含義。例如,\.
可以匹配真正的句點而不是匹配任意字符。 -
貪婪匹配和非貪婪匹配: 正則表達式默認是貪婪匹配,即盡可能多地匹配字符。非貪婪匹配在量詞后加上問號
?
,使其盡可能少地匹配字符。例如,.*
是貪婪匹配,而.*?
是非貪婪匹配。 -
邊界匹配: 正則表達式可以用
^
表示字符串的開始,用$
表示字符串的結束。這樣可以確保模式匹配必須出現(xiàn)在字符串的開始或結束位置。 -
替換和捕獲: 正則表達式可以用于替換文本中的匹配項,也可以使用括號
()
進行捕獲,并在替換中引用捕獲的內(nèi)容。 -
修飾符: 正則表達式通常支持一些修飾符來修改其行為。例如,
i
表示不區(qū)分大小寫,g
表示全局匹配,m
表示多行匹配等。
不過,不同的編程語言和工具對正則表達式的支持可能有所不同,因此在具體應用中需要查閱相應的文檔和規(guī)范。
RegExp函數(shù)
const regex = new RegExp("pattern",gi);
RegExp屬性
在 JavaScript 中,正則表達式的構造函數(shù) RegExp
具有以下屬性:
-
source(只讀): 返回正則表達式的模式字符串,即正則表達式的文本模式部分。
-
global(只讀): 返回一個布爾值,表示是否開啟全局匹配模式。如果為
true
,則正則表達式會匹配所有符合模式的文本,而不是在找到第一個匹配后停止。 -
ignoreCase(只讀): 返回一個布爾值,表示是否開啟忽略大小寫模式。如果為
true
,則正則表達式在匹配時會忽略大小寫。 -
multiline(只讀): 返回一個布爾值,表示是否開啟多行匹配模式。如果為
true
,則正則表達式中的^
和$
會匹配字符串中每一行的開始和結束位置。 -
sticky(只讀): 返回一個布爾值,表示是否開啟粘連匹配模式。如果為
true
,則正則表達式將會從目標字符串的當前lastIndex
位置開始匹配。 -
unicode(只讀): 返回一個布爾值,表示是否開啟 Unicode 匹配模式。如果為
true
,則正則表達式會正確處理 Unicode 字符。 -
flags(只讀): 返回包含正則表達式標志的字符串,標志是用來指定正則表達式的附加選項的,例如 “gi” 表示同時開啟全局匹配和忽略大小寫模式。
這些屬性可以通過正則表達式對象的構造函數(shù) RegExp
的實例來訪問。例如:
const regex = new RegExp("pattern", "gi");
console.log(regex.source); // "pattern"
console.log(regex.global); // true
console.log(regex.ignoreCase); // true
console.log(regex.multiline); // false
console.log(regex.sticky); // false
console.log(regex.unicode); // false
console.log(regex.flags); // "gi"
以上代碼中的 "pattern"
是一個示例正則表達式的模式字符串,可以根據(jù)需要替換成實際的正則表達式模式。
RegExp對象方法
在 JavaScript 中,正則表達式的構造函數(shù) RegExp
以及正則表達式對象都有一些方法可以用于執(zhí)行不同的操作。以下是常見的正則表達式方法:
- test(): 在字符串中測試正則表達式是否匹配。返回一個布爾值,表示是否找到匹配項。
const regex = /pattern/;
const text = "This is a pattern test.";
console.log(regex.test(text)); // true
- exec(): 在字符串中執(zhí)行正則表達式搜索,返回匹配結果的數(shù)組或 null。該方法返回一個數(shù)組,包含匹配到的文本以及捕獲組的信息。
const regex = /pattern/g;
const text = "This is a pattern test.";
let match = regex.exec(text);
while (match !== null) {
console.log(match[0]); // 輸出匹配到的文本
match = regex.exec(text); // 繼續(xù)搜索下一個匹配項
}
- match(): 在字符串中搜索匹配項,返回匹配結果的數(shù)組或 null。如果正則表達式帶有全局標志 g,則返回所有匹配項的數(shù)組。否則,只返回第一個匹配項的數(shù)組。
const regex = /pattern/g;
const text = "This is a pattern test.";
const matches = text.match(regex);
console.log(matches); // ["pattern"]
- search(): 在字符串中查找匹配項,返回第一個匹配項的索引。如果找不到匹配項,則返回 -1。
const regex = /pattern/;
const text = "This is a pattern test.";
console.log(text.search(regex)); // 10
- replace(): 在字符串中使用替換文本替換匹配項。
const regex = /pattern/g;
const text = "This is a pattern test.";
const replacedText = text.replace(regex, "replacement");
console.log(replacedText); // "This is a replacement test."
RegExp`構造函數(shù)的第二個參數(shù)
除了 "gi"
(全局匹配和忽略大小寫)之外,RegExp
構造函數(shù)的第二個參數(shù)還可以包含其他標志,用于指定正則表達式的附加選項。以下是常見的標志:
-
g
(全局匹配): 查找所有匹配項,而不是在找到第一個匹配項后停止。 -
i
(忽略大小寫): 在匹配時忽略目標字符串的大小寫。 -
m
(多行匹配): 開啟多行模式。在此模式下,^
和$
會匹配字符串中每一行的開始和結束位置,而不僅僅是整個字符串的開始和結束。 -
s
(單行匹配): 開啟單行模式。在此模式下,.
可以匹配包括換行符在內(nèi)的任意字符。 -
u
(Unicode 匹配): 開啟 Unicode 模式。在此模式下,將正確處理 Unicode 字符。 -
y
(粘連匹配): 開啟粘連匹配模式。正則表達式將從目標字符串的當前lastIndex
位置開始匹配。 -
d
(具有 dollar 符號的特殊字符): 開啟允許使用$
符號匹配行尾。
這些標志可以單獨使用,也可以組合使用。例如,如果需要開啟全局匹配、忽略大小寫和多行匹配,可以使用 "gim"
。
注意:
- 標志的順序并不重要,例如
"gi"
和"ig"
都會開啟全局匹配和忽略大小寫。 - 如果在構造函數(shù)中同時使用了某個標志,在正則表達式字面量中也使用了相同標志,正則表達式字面量中的標志會覆蓋構造函數(shù)中的標志。例如:
new RegExp("pattern", "i")
和/pattern/i
是等效的,都表示忽略大小寫匹配。 - 不是所有的標志都在所有 JavaScript 引擎中都得到支持。因此,在使用非全局共享的正則表達式時,最好只使用必要的標志。
常用的正則例子
只包含數(shù)字(包括正數(shù)、負數(shù)、零)
const reg = /^-?\d+(\.\d+)?$/;
console.log(reg.test(123)); // true
console.log(reg.test(-123)); // true
console.log(reg.test(-12.3)); // true
console.log(reg.test(0)); // true
console.log(reg.test('0aaaaa')); // false
解釋:
-
^
表示匹配字符串的開始位置。 -
-?
表示可選的負號,即匹配一個或零個減號。 -
\d+
表示匹配一個或多個數(shù)字。 -
(\.\d+)?
表示可選的小數(shù)部分,其中\.
表示匹配一個點(小數(shù)點),\d+
表示匹配一個或多個數(shù)字。 -
$
表示匹配字符串的結束位置。
注意:
- 這個正則表達式只匹配純數(shù)字字符串,不包含指數(shù)形式(如科學計數(shù)法)。
- 如果要匹配純整數(shù)字符串(不包含小數(shù)),可以去掉
(\.\d+)?
部分,即使用^-?\d+$
。
只包含英文數(shù)字及下劃線
要匹配只包含英文字母、數(shù)字和下劃線的正則表達式,可以使用以下模式:
const reg = /^[A-Za-z0-9_]+$/;
console.log(reg.test(123)); // true
console.log(reg.test(-123)); // false
console.log(reg.test('aaa11')); // true
console.log(reg.test('_a')); // true
解釋:
-
^
表示匹配字符串的開始位置。 -
[A-Za-z0-9_]
表示一個字符類,匹配任意一個大寫字母、小寫字母、數(shù)字或下劃線。 -
+
表示匹配前面的元素一個或多個次數(shù)。 -
$
表示匹配字符串的結束位置。
注意:
- 這個正則表達式只匹配完全由英文字母、數(shù)字和下劃線組成的字符串。
- 如果字符串可以為空(即長度為零),可以將
+
修改為*
,即使用^[A-Za-z0-9_]*$
。這樣可以允許空字符串的匹配。
只包含中英文數(shù)字及鍵盤上的特殊字符
要匹配只包含中文、英文字母、數(shù)字以及鍵盤上的特殊字符的正則表達式,可以使用以下模式:
const reg = /^[\u4E00-\u9FA5A-Za-z0-9`~!@#$%^&*()_\-+=\[\]{}|\\:;"'<>,.?/]+$/;
解釋:
-
^
表示匹配字符串的開始位置。 -
[\u4E00-\u9FA5]
表示匹配中文字符的范圍,它包含了常見的中文字符。 -
A-Za-z
表示匹配任意一個大寫字母或小寫字母。 -
0-9
表示匹配任意一個數(shù)字。 -
`~!@#$%^&*()_\-+=\[\]{}|\\:;"'<>,.?/`
表示匹配鍵盤上的特殊字符。 -
+
表示匹配前面的元素一個或多個次數(shù)。 -
$
表示匹配字符串的結束位置。
這個正則表達式可以匹配只包含中文、英文字母、數(shù)字以及鍵盤上的特殊字符的字符串。
注意:
- 這個正則表達式僅包含了一部分常見的中文字符,并不包含全部的中文字符范圍。如果需要涵蓋更多中文字符,可以根據(jù)需求擴展范圍。
- 對于特殊字符的范圍,這里列出了一些常見的特殊字符,但并不是所有鍵盤上的特殊字符都包含在內(nèi)。如果有特定特殊字符需求,可以在方括號中添加相應的字符。
- 由于涉及中文字符,建議使用 Unicode 編碼表示中文字符的范圍,因此
\u4E00-\u9FA5
表示中文字符的范圍。
校驗密碼是否符合規(guī)則的正則
要校驗密碼是否符合規(guī)則,通??梢允褂谜齽t表達式來檢查密碼是否滿足特定的要求。下面是一個示例正則表達式,用于校驗密碼是否符合一般的密碼規(guī)則:
這個正則表達式強制密碼必須包含至少一個字母、一個數(shù)字和一個特殊字符,并且密碼長度至少為 8 個字符。
const reg =/ ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
解釋:
-
^
表示匹配字符串的開始位置。 -
(?=.*[A-Za-z])
表示使用正向肯定預查來確保密碼中包含至少一個字母(大小寫均可)。 -
(?=.*\d)
表示使用正向肯定預查來確保密碼中包含至少一個數(shù)字。 -
(?=.*[@$!%*?&])
表示使用正向肯定預查來確保密碼中包含至少一個特殊字符(可以根據(jù)需要擴展特殊字符的范圍)。 -
[A-Za-z\d@$!%*?&]{8,}
表示匹配至少包含 8 個以上字符的字母、數(shù)字和特殊字符的組合。 -
$
表示匹配字符串的結束位置。
請根據(jù)自己的密碼需求更改正則。
校驗http或者https端口號的正則
校驗 HTTP 或 HTTPS 端口號的正則表達式可以使用以下模式:
const reg = /^(http|https):\/\/(www\.)?[A-Za-z0-9]+\.[A-Za-z]+(:[0-9]+)?$/
解釋:
-
^
表示匹配字符串的開始位置。 -
(http|https)
表示匹配 “http” 或 “https” 中的一個。 -
:\/\/
表示匹配 “??/”。 -
(www\.)?
表示匹配可選的 “www.”,即網(wǎng)址可能有 “www.” 前綴或沒有。 -
[A-Za-z0-9]+
表示匹配至少一個字母或數(shù)字。 -
\.
表示匹配點(用于域名部分的分隔)。 -
[A-Za-z]+
表示匹配至少一個字母(用于域名的頂級域部分)。 -
(:[0-9]+)?
表示匹配可選的冒號加上至少一個數(shù)字,用于表示端口號。 -
$
表示匹配字符串的結束位置。
這個正則表達式可以匹配以下樣例:
http://www.example.com
https://www.example.com
http://example.com:8080
https://example.com:8443
請注意:
- 這個正則表達式只校驗 URL 中的域名部分和端口號,不涉及其他 URL 組件(例如路徑、查詢參數(shù)等)的校驗。
- 此處的正則表達式是一個簡單的示例,實際的 URL 校驗可能更加復雜,可以根據(jù)需求進行修改和擴展。
- 在實際應用中,也可以使用編程語言提供的 URL 解析函數(shù)或庫來解析 URL,并從中提取出域名和端口號進行校驗。
只校驗端口號
校驗端口號是否正確的正則表達式如下:
const reg =/^(0|([1-9]\d{0,3})|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/
解釋:
這個正則表達式用于校驗端口號是否正確。它可以匹配范圍在 0 到 65535 的合法端口號。端口號是一個 16 位無符號整數(shù)。
正則表達式的具體規(guī)則如下:
-
^
表示匹配字符串的開始位置。 -
0
匹配端口號為 0 的情況。 -
[1-9]\d{0,3}
匹配端口號在 1 到 9999 之間的情況。 -
[1-5]\d{4}
匹配端口號在 10000 到 59999 之間的情況。 -
6[0-4]\d{3}
匹配端口號在 60000 到 64999 之間的情況。 -
65[0-4]\d{2}
匹配端口號在 65000 到 65499 之間的情況。 -
655[0-2]\d
匹配端口號在 65500 到 65529 之間的情況。 -
6553[0-5]
匹配端口號在 65530 到 65535 之間的情況。 -
$
表示匹配字符串的結束位置。
這個正則表達式可以用于驗證端口號是否在 0 到 65535 的范圍內(nèi),是否為合法的端口號。
校驗正確的ip地址
要校驗是否是正確的 IP 地址(IPv4 或 IPv6),可以使用以下兩個正則表達式分別進行匹配:
IPv4 地址的正則表達式:
const reg = /^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}$/;
IPv6 地址的正則表達式:
const reg = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
解釋:
IPv4 地址的正則表達式:
-
^
表示匹配字符串的開始位置。 -
(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})
表示匹配 0 到 255 之間的數(shù)字,考慮到前導零的情況。 -
\.
表示匹配點。 -
(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}
表示匹配三個點隔開的數(shù)字段。 -
$
表示匹配字符串的結束位置。
這個正則表達式可以校驗 IPv4 地址是否合法。
IPv6 地址的正則表達式:
-
^
表示匹配字符串的開始位置。 -
([0-9a-fA-F]{1,4}:){7}
表示匹配 7 組以冒號分隔的 16 進制數(shù)。 -
[0-9a-fA-F]{1,4}
表示匹配一個 16 進制數(shù)。 -
$
表示匹配字符串的結束位置。
這個正則表達式可以校驗 IPv6 地址是否合法。
請注意,正則表達式僅可以校驗 IP 地址的格式是否正確,無法判斷其是否為真實可用的 IP 地址。如果需要對 IP 地址進行更嚴格的驗證,可以在代碼中進一步檢查 IP 地址的有效性。文章來源:http://www.zghlxwxcb.cn/news/detail-621170.html
一些號碼(電話號、身份證、銀行卡)
這里給到的示例只針對中國大陸使用的:文章來源地址http://www.zghlxwxcb.cn/news/detail-621170.html
const regPhone = /^\+?[0-9\s-]+$/; // 電話號碼
const regId = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dX]$/; // 身份證號
const regBank = /^[1-9]\d{9,18}$/; //銀行卡號
到了這里,關于正則表達式、常用的正則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!