App下載

Javascript:正則表達(dá)式初學(xué)者指南(Regex)

自我否定先驅(qū)者 2021-09-09 10:14:58 瀏覽數(shù) (2661)
反饋

正則表達(dá)式是形成可以在字符串中搜索的模式的一組字符。正則表達(dá)式可用于驗(yàn)證,例如驗(yàn)證信用卡號(hào),用于搜索,即通過(guò)復(fù)雜的文本匹配,以及用另一個(gè)字符串替換匹配的文本。它還具有出色的多語(yǔ)言支持,學(xué)習(xí)一次,你可以跨多種編程語(yǔ)言使用它。

我見(jiàn)過(guò)很少有人第一次看正則表達(dá)式,然后完全忽略它。我不怪他們;regex 的語(yǔ)法很復(fù)雜,就像那些命令行語(yǔ)言一樣,會(huì)讓很多人感到畏縮,只會(huì)更糟。但是每一個(gè)新事物都是可怕的,一開(kāi)始似乎是不可能學(xué)會(huì)的。所以,借用霍拉修斯的話,我會(huì)這樣說(shuō);開(kāi)始,勇敢,冒險(xiǎn)變得明智。

正則表達(dá)式 - 簡(jiǎn)介

Regex 起源于神經(jīng)科學(xué)數(shù)學(xué),直到 1968 年Ken Thompson在用于文本搜索的 QED 文本編輯器中才在編程中實(shí)現(xiàn)。現(xiàn)在它是許多編程語(yǔ)言的一部分,例如perl、Java、Python、Ruby 和 JavaScript。

讓我們看一些關(guān)于正則表達(dá)式如何工作的例子。

我會(huì)用 JavaScript在我的例子中?,F(xiàn)在,要通過(guò)初級(jí)水平,你需要學(xué)習(xí)所有字符、類、量詞、修飾符和方法在正則表達(dá)式中使用。這是JavaScript教程中的正則表達(dá)式頁(yè)面的鏈接,你可以在其中查看包含所有這些的表。你還可以參考本文末尾的備忘單,其中包含最常用的字符。

讓我們看一個(gè)帶有解釋的簡(jiǎn)單示例。這是一個(gè)正則表達(dá)式。

正則表達(dá)式

這是上面的正則表達(dá)式將在一行中查找的內(nèi)容,一個(gè)字符 'B' 后跟(包括)'a' 到 'z'、'A' 到 'Z' 和數(shù)字 0 到 'Z' 之間的任何字符中的至少一個(gè)9.

以下是突出顯示的一行中的匹配示例:

Basket, bulb,B12 vitamin, BaSO4 , N BC company

上面的正則表達(dá)式將停止搜索"?Basket?"并返回一個(gè)積極的回復(fù). 這是因?yàn)槿绻阆M齽t表達(dá)式查看所有可能的匹配項(xiàng),則必須指定全局修飾符 ' ?g?'。

現(xiàn)在,讓我們看看如何使用這個(gè)表達(dá)式 JavaScript. 該test法有云:如果找到了一個(gè)匹配的回報(bào)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ù)組中找到的匹配項(xiàng)。

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)在讓我們用正則表達(dá)式試試。

var input = "your test string", 
regex = /B[a-zA-Z\d]+/g;
alert(input.replace(regex, "#"));

正則表達(dá)式練習(xí)

對(duì)于練習(xí),你可以在百度、谷歌等搜索“正則表達(dá)式練習(xí)”并嘗試解決它們。根據(jù)難度級(jí)別,以下是嘗試這些練習(xí)時(shí)的預(yù)期結(jié)果。

基本的

對(duì)我來(lái)說(shuō),能夠驗(yàn)證密碼對(duì)初學(xué)者來(lái)說(shuō)就足夠了。因此,驗(yàn)證 8 到 16 個(gè)字符的密碼長(zhǎng)度, 字母數(shù)字,允許你選擇特殊字符。

中間的

這是你應(yīng)該練習(xí)更多真實(shí)世界數(shù)據(jù)并學(xué)習(xí)更多正則表達(dá)式點(diǎn)的地方,如前瞻、后視斷言和匹配組;

  • 驗(yàn)證 PIN 碼、十六進(jìn)制、日期、電子郵件 ID、浮點(diǎn)數(shù)。
  • 替換尾隨零、空格、一組匹配的單詞
  • 提取 URL 的不同部分
進(jìn)階的

你可以優(yōu)化上述練習(xí)的解決方案 - 最優(yōu)化的電子郵件正則表達(dá)式包含數(shù)千個(gè)字符 - 因此,只要你感到舒服就可以使用它,這就足夠了。你也可以試試:

  • 解析HTML或XML(盡管在現(xiàn)實(shí)世界中不鼓勵(lì)這樣做,因?yàn)槭褂谜齽t表達(dá)式解析像HTML這樣的非正則語(yǔ)言永遠(yuǎn)不會(huì)萬(wàn)無(wú)一失。加上XML解析是一項(xiàng)艱巨的任務(wù),更適合高級(jí)用戶)
  • 替換標(biāo)簽
  • 刪除注釋(IE 條件注釋除外)

正則表達(dá)式工具

可視化正則表達(dá)式的工具對(duì)我來(lái)說(shuō)是最酷的事情之一。如果你遇到過(guò)很長(zhǎng)的復(fù)雜正則表達(dá)式,只需將它們復(fù)制粘貼到其中一個(gè)工具中,你就可以清楚地查看流程。除此之外,你還可以使用許多工具來(lái)處理正則表達(dá)式代碼。他們還展示了示例和備忘單以及共享功能。

  • Debuggex - 它會(huì)根據(jù)你的輸入繪制正則表達(dá)式圖,你可以從那里快速共享到 StackOverflow。
  • RegExr – 你可以用這個(gè)來(lái)測(cè)試你的正則表達(dá)式。它還提供了參考、備忘單和示例來(lái)幫助你。

正則表達(dá)式備忘單

令牌定義
[ABC]任何單個(gè)字符 a、b 或 c
[^abc]除 a、b 或 c 之外的任何字符
[az]介于(包括)a 到 z 之間的字符
[^az]除 a 到 z 之外的字符
[AZ]介于(包括)A 到 Z 之間的字符
.任意單個(gè)字符
\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 次
^字符串的開(kāi)始
$字符串結(jié)束
\b一個(gè)詞的邊界。如果字符是單詞的最后一個(gè)或第一個(gè)單詞字符,或者如果字符介于單詞或非單詞字符之間
\B非詞邊界


0 人點(diǎn)贊