正則表達式是形成可以在字符串中搜索的模式的一組字符。正則表達式可用于驗證,例如驗證信用卡號,用于搜索,即通過復雜的文本匹配,以及用另一個字符串替換匹配的文本。它還具有出色的多語言支持,學習一次,你可以跨多種編程語言使用它。
我見過很少有人第一次看正則表達式,然后完全忽略它。我不怪他們;regex 的語法很復雜,就像那些命令行語言一樣,會讓很多人感到畏縮,只會更糟。但是每一個新事物都是可怕的,一開始似乎是不可能學會的。所以,借用霍拉修斯的話,我會這樣說;開始,勇敢,冒險變得明智。
正則表達式 - 簡介
Regex 起源于神經(jīng)科學和數(shù)學,直到 1968 年Ken Thompson在用于文本搜索的 QED 文本編輯器中才在編程中實現(xiàn)?,F(xiàn)在它是許多編程語言的一部分,例如perl、Java、Python、Ruby 和 JavaScript。
讓我們看一些關(guān)于正則表達式如何工作的例子。
我會用 JavaScript在我的例子中?,F(xiàn)在,要通過初級水平,你需要學習所有字符、類、量詞、修飾符和方法在正則表達式中使用。這是JavaScript教程中的正則表達式頁面的鏈接,你可以在其中查看包含所有這些的表。你還可以參考本文末尾的備忘單,其中包含最常用的字符。
讓我們看一個帶有解釋的簡單示例。這是一個正則表達式。
這是上面的正則表達式將在一行中查找的內(nèi)容,一個字符 'B' 后跟(包括)'a' 到 'z'、'A' 到 'Z' 和數(shù)字 0 到 'Z' 之間的任何字符中的至少一個9.
以下是突出顯示的一行中的匹配示例:
Basket, bulb,B12 vitamin, BaSO4 , N BC company
上面的正則表達式將停止搜索"?Basket
?"并返回一個積極的回復. 這是因為如果你希望正則表達式查看所有可能的匹配項,則必須指定全局修飾符 ' ?g
?'。
現(xiàn)在,讓我們看看如何使用這個表達式 JavaScript. 該test法有云:如果找到了一個匹配的回報true,否則false。
var input = "your test string", regex = /B[a-zA-Z\d]+/;
if(!regex.test(input))
alert('No match is found');
else
alert('A match is found');
讓我們嘗試另一種方法:match
返回在數(shù)組中找到的匹配項。
var input = "your test string",
regex = /B[a-zA-Z\d]+/g,
/*I've added the global modifier 'g' to the regex to get all the matches*/
ary = input.match(regex);
if(ary===null)
alert('No match is found');
else
alert('matches are: ' + ary.toString());
字符串replace
呢?現(xiàn)在讓我們用正則表達式試試。
var input = "your test string",
regex = /B[a-zA-Z\d]+/g;
alert(input.replace(regex, "#"));
正則表達式練習
對于練習,你可以在百度、谷歌等搜索“正則表達式練習”并嘗試解決它們。根據(jù)難度級別,以下是嘗試這些練習時的預期結(jié)果。
基本的
對我來說,能夠驗證密碼對初學者來說就足夠了。因此,驗證 8 到 16 個字符的密碼長度, 字母數(shù)字,允許你選擇特殊字符。
中間的
這是你應該練習更多真實世界數(shù)據(jù)并學習更多正則表達式點的地方,如前瞻、后視斷言和匹配組;
- 驗證 PIN 碼、十六進制、日期、電子郵件 ID、浮點數(shù)。
- 替換尾隨零、空格、一組匹配的單詞
- 提取 URL 的不同部分
進階的
你可以優(yōu)化上述練習的解決方案 - 最優(yōu)化的電子郵件正則表達式包含數(shù)千個字符 - 因此,只要你感到舒服就可以使用它,這就足夠了。你也可以試試:
- 解析HTML或XML(盡管在現(xiàn)實世界中不鼓勵這樣做,因為使用正則表達式解析像HTML這樣的非正則語言永遠不會萬無一失。加上XML解析是一項艱巨的任務,更適合高級用戶)
- 替換標簽
- 刪除注釋(IE 條件注釋除外)
正則表達式工具
可視化正則表達式的工具對我來說是最酷的事情之一。如果你遇到過很長的復雜正則表達式,只需將它們復制粘貼到其中一個工具中,你就可以清楚地查看流程。除此之外,你還可以使用許多工具來處理正則表達式代碼。他們還展示了示例和備忘單以及共享功能。
- Debuggex - 它會根據(jù)你的輸入繪制正則表達式圖,你可以從那里快速共享到 StackOverflow。
- RegExr – 你可以用這個來測試你的正則表達式。它還提供了參考、備忘單和示例來幫助你。
正則表達式備忘單
令牌 | 定義 |
[ABC] | 任何單個字符 a、b 或 c |
[^abc] | 除 a、b 或 c 之外的任何字符 |
[az] | 介于(包括)a 到 z 之間的字符 |
[^az] | 除 a 到 z 之外的字符 |
[AZ] | 介于(包括)A 到 Z 之間的字符 |
. | 任意單個字符 |
\s | 任何空白字符 |
\S | 任何非空白字符 |
\d | 任何數(shù)字 0 到 9 |
\D | 任何非數(shù)字 |
\w | 任何單詞字符(字母、數(shù)字和下劃線) |
\W | 任何非單詞字符 |
(…) | 捕獲所有封閉的東西 |
(a|b) | 匹配 a 或 b |
a? | 字符 a 要么不存在,要么出現(xiàn)一次 |
a* | 字符 a 要么不存在,要么出現(xiàn)多次 |
a+ | 字符 a 出現(xiàn)一次或多次 |
{3} | 字符 a 連續(xù)出現(xiàn) 3 次 |
{3,} | 字符 a 連續(xù)出現(xiàn) 3 次或更多 |
{3,6} | 字符 a 連續(xù)出現(xiàn) 3 到 6 次 |
^ | 字符串的開始 |
$ | 字符串結(jié)束 |
\b | 一個詞的邊界。如果字符是單詞的最后一個或第一個單詞字符,或者如果字符介于單詞或非單詞字符之間 |
\B | 非詞邊界 |