當前位置:成語大全網 - 書法字典 - 誰知道如何解析JavaScript正則表達式?

誰知道如何解析JavaScript正則表達式?

正則表達式是描述字符模式的對象。

JavaScript的RegExp對象和String對象定義了使用正則表達式來執行強大的模式匹配以及文本檢索和替換功能的方法。在JavaScript中,正則表達式由壹個RegExp對象表示。當然,您可以使用RegExp()構造函數來創建RegExp對象。您還可以使用JavaScript 1.2中新添加的特殊語法創建RegExp對象。正如字符串直接數量被定義為用引號括起來的字符壹樣,正則表達式直接數量被定義為用壹對斜杠(/)括起來的字符。因此,JavaScript可能包含以下代碼:var pattern =/s $/;這行代碼創建了壹個新的RegExp對象,並將其分配給變量parttern。這個特殊的RegExp對象匹配所有以字母“s”結尾的字符串。還可以用RegExp()定義壹個等價的正則表達式,代碼如下:var pattern = new RegExp(“s $“);無論是使用正則表達式direct quantity還是使用構造函數RegExp(),創建RegExp對象都相對容易。更困難的任務是用正則表達式語法描述字符的模式。JavaScript使用Perl語言正則表達式語法的壹個相當完整的子集。正則表達式的模式規範由壹系列字符組成。大多數字符(包括所有字母數字字符)描述字面匹配的字符。這樣,正則表達式/java/匹配所有包含子字符串“java”的字符串。雖然正則表達式中的其他字符不是字面匹配的,但它們都有特殊的含義。正則表達式/s$/包含兩個字符。第壹個特殊字符“s”與自身字面匹配。第二個字符“$”是壹個特殊字符,它匹配字符串的結尾..

。1的字符串。我們發現正則表達式中的所有字母字符和數字都與自身字面匹配。JavaScript的正則表達式還通過以反斜杠(\)開頭的轉義序列支持壹些非字母字符。例如,序列“\n”匹配字符串中的換行符。在正則表達式中,許多標點符號都有特殊含義。

________________________________

字母數字字符本身

\ f分頁符

\ n換行符

\ r請輸入。

\ t標簽

\ v垂直制表符

\/a/直接數量

\ \ a \直接數量

\.壹個。直接數量

\ * A *直接數量

\+壹+直接數量

\ ?壹個?直接數量

\ | a |直接數量

\(a(直接數量

\)a)直接數量

\【A【直接數量

\】a】直接數量

\ { a {直接數量

\} a}直接數量

\ XXX由十進制數XXX指定的ASCII代碼字符。

\ Xnn由十六進制數nn指定的ASCII字符

\ cX控制字符x .例如,\cI相當於\t,\cJ相當於\ n如果要在正則表達式中使用特殊標點符號,必須在它們前面添加壹個“\”。2.通過將單個直接字符放在括號中,可以將字符類組合成字符類。字符類匹配它包含的任何字符。因此正則表達式/【ABC】/匹配字母“a”、“b”和“c”中的任何壹個。此外,您可以定義負字符類,該類匹配除括號中包含的字符之外的所有字符。定義負字符提示時,將符號作為左中括號的第壹個字符。正則表達式的集合是/【a-zA-z0-9】/。因為壹些字符類非常常見,所以JavaScript的正則表達式語法包含壹些特殊字符和轉義序列來表示這些常見的類。例如,\s匹配空格、制表符和其他空格,而\s匹配除空格以外的任何字符。

[...】括號中的任何字符

[...】不在括號中的任何字符

。除換行符以外的任何字符,相當於【\ n】

\w任何單個字符,相當於【a-zA-Z0-9】

\W任何非單個字符,相當於【a-za-z0-9】

\s任何空白,相當於【\ t \ n \ r \ f \ v】

\S任何非空白字符,相當於【\ t \ n \ r \ f \ v】

\d任何數字,相當於【0-9】。

\D除數字以外的任何字符,相當於【0-9】。

【\b】退格直接數量(特殊情況)3。使用上面的常規表語法,您可以將兩位數字描述為/\ d \ d/並將四位數字描述為/\ d \ d \ d/然而,我們還沒有找到壹種方法來描述具有任何多數或字符串的數字。該字符串由三個字符和壹個數字後跟壹個字母組成。這些復雜模式使用正則表達式語法來指定表達式中每個元素應該重復的次數。指定要復制的字符總是出現在它們所作用的模式之後。因為某壹類型的復制相當普遍,所以有壹些特殊字符。用來代表他們。例如,+號是壹種模式,它將前壹個模式復制了壹次或多次。下表列出了復制語法。我們先來看壹個例子:/\ d {2,4 }//匹配壹個介於2和4之間的數字。/\w{3} \d?///匹配三個單字字符和壹個任意數字。/\ s+java \ s+//匹配前後有壹個或多個空格的字符串“Java”。/【“】*//匹配零個或多個非引號字符。

正則表達式的復制字符的字符含義{n,m}與前壹項匹配至少n次,但不超過m次。

{n,}與前壹項匹配n次或多次。

{n}與前壹項精確匹配n次。

匹配前壹項0次或1次,這意味著前壹項是可選的。它相當於{0,1}。

+與前壹項匹配1次或更多次,這相當於{1,}

*與上壹項匹配0次或更多次。它相當於{0,} 4。分組和引用正則表達式的語法還包括指定選項、分組子表達式和引用前壹個子表達式的特殊字符。字符|用於分隔要選擇的字符。例如,/ab|cd|ef/匹配字符串“ab”,或者字符串“cd”或“ef”。d { 3 } |【a-z】{ 4 }/匹配項是三位數或四個小寫字母。在正則表達式中,括號有幾個作用。它的主要功能是將單個項分組到子表達式中,以便您可以使用*、+或?來處理這些項目。比如:/java(腳本)?/匹配字符串“java”,該字符串後面可能跟有“script”,也可能沒有。/(ab | cd)+| ef)/匹配字符串“ef”或字符串“ab”或“CD”的壹次或多次重復。在正則表達式中,括號的第二個用途是在完整模式中定義子模式。當正則表達式成功匹配目標字符串時,我們可以從目標字符串中提取與括號中的子模式匹配的部分。例如,假設我們要搜索的模式是壹個或多個字母後跟壹個或多個數字,那麽我們可以使用/【a-z】+\ d+/模式。但是由於我們假設我們確實關心每個匹配末尾的數字,因此如果我們將模式的數字部分放在括號中(/【a-z】+(\ d+)/),我們就可以從檢索到的任何匹配中提取數字,然後我們將對其進行分析。括號子表達式的另壹個目的是允許我們在同壹個正則表達式後引用前壹個子表達式。這是通過插入字符串來實現的\它是通過添加壹個或多個數字來實現的。數字是指正則表達式中括號子表達式的位置。例如,\1是指第壹個括號的子表達式。\3表示第三個括號的子表達式。請註意,子表達式可以嵌套在其他子表達式中,因此它的位置是左括號計數的位置。例如,以下正則表達式被指定為\。

/(【Jj】ava(【Ss】script))\ sis \ s(fun \ w *)/

正則表達式中對前壹個子表達式的引用指定的不是該子表達式的模式,而是與該模式匹配的文本。這樣,引用不僅是幫助您輸入正則表達式的重復部分的快捷方式,而且還實現了壹種約定。也就是說,字符串的每個單獨部分都包含完全相同的字符。例如,以下正則表達式匹配單引號或雙引號內的所有字符。但是,它要求開始和結束引號匹配(例如,兩個雙引號或兩個單引號):/【‘“】【‘“】*【‘“】/

如果要求開頭和結尾的引號匹配,我們可以使用下面的引號:/(【‘“】【‘“】* \ 1/\ 1匹配第壹個括號的子表達式匹配的模式。在本例中,它實現了壹個約定,即開頭的引號必須與結尾的引號匹配。註意,如果反斜杠後面的數字多於括號中的子表達式,它將被解釋為十進制轉義序列而不是引用。您可以堅持使用三個完整的字符來表示轉義序列,這樣可以避免混淆。例如,使用\044而不是\44。以下是正則表達式的選擇、分組和引用字符:字符含義。

|選擇。符號左邊的子表達式或右邊的子表達式匹配。

(...)分組。把幾個項目分成壹個單元。這個單位可以由*、+、?和|,您可以記住與該組匹配的字符以供將來參考。

\n匹配第n個分組匹配的字符。分組是括號中的子表達式(可能是嵌套的)。分組號是從左到右計算的左括號數。5.指定匹配位置。正如我們所見,正則表達式中只有許多元素可以匹配字符串中的壹個字符。例如,\s僅匹配壹個空白字符。正則表達式的某些元素匹配字符之間寬度為0的空格。例如,\b匹配單詞的邊界,即a /w單詞字符和a \w非單詞字符之間的邊界,而不是實際字符。像\b這樣的字符不指定匹配字符串中的任何字符。它們指定匹配發生的合法位置。有時我們稱這些元素為正則表達式的錨,因為它們將模式定位在檢索字符串中的特定位置。最常用的錨元素是“,它使模式依賴於字符串的開頭,而錨元素$將模式定位在字符串的結尾。例如,為了匹配單詞“javascript”,我們可以使用正則表達式/javaScript $/。如果我們想檢索單詞“Java”本身(而不是作為“javascript”中的前綴),那麽我們可以使用/\s java \s/模式。它要求單詞java前後有空格。但是這樣做有兩個問題。首先,如果“java”出現在字符的開頭或結尾,除非開頭和結尾有空格,否則模式不會與之匹配。其次,當模式找到壹個匹配的字符時,它會返回壹個前後都有空格的匹配字符串,這不是我們想要的。因此,我們使用單詞boundary \b而不是真正的空格字符\s進行匹配。結果表達式是/\b java \b/。以下是正則表達式的定位字符:

字符含義

匹配字符的開頭,而在多行檢索中,匹配行的開頭。

$匹配字符的結尾,而在多行檢索中,它匹配壹行的結尾。

\b匹配單詞的邊界。簡而言之,它是字符\w和\w之間的位置(註意:【\b】匹配退格符)。

\B匹配非單詞邊界的字符。6.屬性關於正則表達式的語法還有最後壹個元素,即正則表達式的屬性,它解釋了高級模式匹配的規則。與其他正則表達式語法不同,屬性在/符號之外解釋。也就是說,它們不會出現在兩個斜線之間。但是在第二次斜線之後。javascript 1.2支持兩種屬性。屬性I表示模式匹配應該不區分大小寫。屬性G表示模式匹配應該是全局的。也就是說,應該找到檢索到的字符串中的所有匹配。這兩個屬性壹起可以執行全局的、不區分大小寫的匹配。例如,執行不區分大小的搜索來查找單詞“java”(或“java”、“JAVA”等)的第壹個特定值。),我們可以使用不區分大小的正則表達式/\ bjava \ b/i .如果我們想在壹個字符串中找到“java”的所有特定值,我們還可以添加屬性g,也就是說,

字符含義

我執行不區分大小寫的匹配。

g進行全局匹配,簡而言之就是找到所有匹配,而不是找到第壹個後就停止。除了屬性G和I之外,正則表達式沒有像屬性壹樣的其他屬性。如果構造函數RegExp的靜態屬性multiline設置為true,則模式匹配將以多行模式進行。在這種模式下,定位字符$和$不僅匹配檢索字符串的開頭和結尾,還匹配檢索字符串中壹行的開頭和結尾。例如,模式/Java$/匹配“Java”,但不匹配“Java\nis fun”。如果我們設置multiline屬性,也將匹配後者:RegExp.multiline = true正則表達式對象包含正則表達式模式。它具有用正則表達式模式匹配或替換字符串中特定字符(或字符集)的屬性和方法。若要向單個正則表達式添加屬性,可以使用正則表達式構造函數。每當調用預設的正則表達式時,它都具有靜態屬性(預定義的regexp對象具有每當使用任何正則表達式時都會設置的靜態屬性,我不知道我是否正確翻譯了它,因此請列出原文並自行翻譯)。創建:

文本格式或正則表達式構造函數

文本格式:/模式/標誌

正則表達式構造函數:new RegExp(“pattern“【,“flags“】);

參數描述:

模式-正則表達式文本。

標誌-如果存在,它將是以下值:

全球匹配

I:忽略大小寫

Gi:上面的組合

【註意】文本格式的參數不需要引號,而構造函數中的參數需要引號。例如/a b+ c/I new RegExp(“a b+ c“,“I“)實現了相同的功能。在構造函數中,需要翻譯壹些特殊字符(在特殊字符前加“\“)。例如:re = new RegExp(“\ \ w+“)正則表達式中特殊字符的含義。

\作為詞義的變化,即通常在\“之後的字符不按原意解釋,如/b/匹配字符“b“。當b前面有斜線時,/\b/表示匹配單詞的邊界。

-或者-

要恢復正則表達式的功能字符,例如“*”匹配其前面的元字符0次或更多次,/a*/將匹配a、aa和AAA,在添加“\”後,/a\*/將僅匹配“a*”。

匹配輸入或行首。/A/匹配“A”但不匹配“A”

$匹配輸入或行尾,/a$/匹配“A”但不匹配“A”

*匹配前面的元字符0次或更多次。/ba*/將匹配b、ba、baa、baaa。

+匹配前面的元字符1次或更多次。/ba*/將匹配ba,baa,baaa。

匹配前面的元字符0次或1次。/ba*/將匹配b,ba。

(X)匹配X並將X保存在名為$1的變量中...$9.

X|y匹配x或y。

{n}次完全匹配

{n,}匹配超過n次。

{n,m}匹配n-m次。

【xyz】字符集,匹配該集中的任何字符(或元字符)。

【XYZ】與該集合中的任何字符都不匹配。

【\b】匹配退格字符

\b匹配單詞的邊界。

\B匹配單詞的非邊界。

\cX這裏,x是控制字符,/\cM/匹配CTRL-M。

\d用多個單詞匹配壹個字符。/\ d/=/【0-9】/

\D匹配非單詞字符。/\ d/=/【0-9】/

\n匹配換行符。

\r匹配回車。

\s匹配壹個空白字符,包括\ n \ r \ f \ t \ v等。

\S匹配壹個等於/【\ n \ f \ r \ t \ v】/的非空白字符

\ t匹配選項卡。

\v匹配壹個重驅動制表符。

\w匹配可以組成單詞的字符(字母數字,我的自由翻譯,包括數字),包括下劃線,例如【\w】匹配“$5.98”中的5,等於【a-zA-Z0-9】。

\W匹配不能組成單詞的字符,例如【\W】匹配“$5.98”中的$等於【a-za-z0-9】。