摘要:分組我們可以通過使用圓括號來對正則表達式進行分組。構成正則表達式中的子表達式。例如,引用的是第一個帶括號的子表達式,則表示引用的是第三個帶括號的子表達式。
為何要用正則
正則表達式是為了專門解決文本的兩個問題而產生的:
查找特定的文本(搜索)
查找并編輯特定的文本(替換)
JavaScript中的正則JavaScript中的正則表達式用RegExp對象來表示。
創(chuàng)建方式:
1. var pattern = new RegExp("s$"); //用RegExp()構造函數來創(chuàng)建 2. var pattern = /s$/; //直接量語法來創(chuàng)建正則的語法 直接量字符
一般來講,正則表達式中的所有字母和數字都是按照字面含義進行匹配的。eg:/s/就是匹配字母s。
非一般的話,就是那些轉義字符和正則中自帶的一些特殊含義的符號。如果想在正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴.
轉義字符: o v f xnn uxxxx cX 殊含義的符號: ^ $ . * + ? = ! : | / () [ ] { }字符類
用方括號包裹直接量字符就組成了字符類。
/[abc]/ //匹配字母"a","b","c"中的任意一個
注意:字符類能夠匹配包含在中括號中的一系列字符中的任意一個,但是匹配的結果只能夠是其中的一個而不是多個。
var str="abcd"; var reg=/[abcd]/; console.log(str.match(reg)); //結果是 ["a", index: 0, input: "abcd"]使用連字符"-"
字符類使用連字符目的是用來表示字符范圍。
/[a-z]/ //匹配小寫字母 /[a-zA-Z0-9]/ //匹配任何字母和數字
排除型字符類"^"注意:字符類可以使用連字符"-"來確定一個匹配的范圍,當然使用連字符也是有原則的,前后兩個字符是有順序的,如果使用相同的編碼,后面的字符碼位應大于或等于前面字符的碼位,例如:
[0-9]//正確的
[9-0]//錯誤的
[^]是一個排除型字符類,用以匹配不在中括號中的任一字符,當然匹配結果也只能夠是一個字符.
/[^abc]/ //匹配除了字符"a"、"b"、"c"之外的任意字符重復
解決正則表達式中某元素的“重復出現次數”。
重復字符語法:
{n,m} 匹配前一項至少n次,但不能超過m次 {n,} 匹配前一項n次或者更多次 {n} 匹配前一項n次 ? 匹配前一項0次或者1次,也就是說前一項是可選的,等價于{0,1} + 匹配前一項1次或者多次,等價于{1,} * 匹配前一項0次或者多次,等價于{0,}貪婪重復 vs 非貪婪重復
貪婪重復: 盡可能多的匹配
非貪婪重復: 盡可能少的匹配
? ?? + +? * +?
注意:使用非貪婪的匹配模式所得的結果可能和期望并不一致。試一試下面例子想想為什么:
var str = "aaab"; var reg = /a+?b/; console.log(str.match(reg));選擇、分組和引用 字符”|”
字符”|”用于分隔供選擇的字符 ,其實就是或的意思。例如/ab|cd|ef/ 匹配的是“ab”或“cd”或“ef”。
分組注意:選擇項的嘗試匹配順序是從左到右考慮,直到發(fā)現了匹配項。如果左邊的選擇項匹配,則忽略右邊的匹配項,即使它產生更好的匹配。
我們可以通過使用圓括號"()"來對正則表達式進行分組 。也就是說把括號內的當成一個獨立的單元。構成正則表達式中的子表達式。
引用引用:我們用引用的對象是誰?
這里就要說下,圓括號"()"在正則表達式中另一個作用是在完整的模式中定義子模式 。
例如:我想要檢索的條件是3個字母加上4個數字
var pattern = /[a-z]{3}d{4}/ ; //3個字母加4個數字的匹配模式
但假定我們真正關心的是每個匹配尾部的數字?要怎么引用數字?so,圓括號"()"派上用場了。
var pattern = /[a-z]{3}(d{4})/ ; //3個字母加4個數字的匹配模式
帶圓括號的表達式的另一個用途是允許我們在同一正則表達式的后部引用前面的子表達式。這是通過在字符””后加一位或多位數字實現的。例如,1引用的是第一個帶括號的子表達式,3則表示引用的是第三個帶括號的子表達式。
問:如果圓括號"()"中嵌套圓括號"()",那么圓括號"()"的位置怎么計算?
答:以圓括號"()"的左括號位置來算。
var pattern = /([Jj]ava([Sscript)?)siss(funw*)/ ; //([Ss]cript)就被指定為/2
接下來再來看看一個例子:
var pattern = /[""][^""]*[""]/ ; //匹配的是單引號或雙引號之內的0個或多個字符
如果我想要前后引號是匹配的(都是單引號或都是雙引號)呢?(這時候就要想起引用了)
var pattern = /([""])[^""]*1/ ;
正則表達式的選擇、分組和引用字符
| 選擇。匹配的是該符號左邊的子表達式或右邊的子表達式,其實就是布爾“或” (…) 組合。將幾個項目組合為一個單元,這個單元可由*、+、?和|等符號使用,而且 還可以記住和這個組合匹配的字符以供此后的引用使用 (?:…) 只是分組。把項目組合到一個單元,但是不記憶與該組匹配的字符 和第n個分組第一次匹配的字符相匹配。組是括號 中的子表達式(可嵌套,以左半括號開始數,從1開始數,一到數下去 ),以(?:…)分組的組不進行編碼指定匹配位置
正則表達式中的有些元素不匹配某個可見的字符,它們指定匹配發(fā)生的合法位置,我們稱這些元素為正則表達式的錨,它們將模式定位在搜索字符串的特定位置上。
^ 匹配字符串的開頭,在多行檢索中,匹配一行的開頭 $ 匹配字符串的結尾,在多行檢索中,匹配一行的結尾 匹配一個單詞的邊界,簡言之,就是位于字符w和W之間的位置,或位于字符W和字符串開頭或結尾之間的位置(但需要注意,[]匹配的是退格符) B 匹配非單詞邊界的位置 (?=p) 零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配p的那些字符 (?!p) 零寬負向先行斷言,要求接下來的字符不與p匹配修飾符
修飾符用以說明高級匹配模式的規(guī)則,放在"/"符號之外。
i 執(zhí)行不區(qū)分大小寫的匹配 g 執(zhí)行一個全局匹配,簡言之,即找到所有的匹配,而不是在找到第一個之后就停止 m 多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結束和字符串的結束
例子:
var str="This is an antzone good"; var reg=/an$/; console.log(str.match(reg)); //以上代碼不能夠匹配字符串"an",盡管"an"后面已經換行了,但是并沒有采用多行匹配,所以不是字符串行的結尾。
var str="This is an antzone good"; var reg=/an$/m; console.log(str.match(reg)); //以上代碼可以匹配字符串"an",因為采用了多行匹配。
總結:
本文簡單的介紹了javascript正則表達式的一些基礎知識,總結知識點就是用[],{},(),正則的特殊字符,錨,還有修飾符等等,來組成一個一個復雜的正則表達式。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83319.html
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
摘要:正則表達式的意義中的正則表達式使用表示,可以使用構造函數來創(chuàng)建對象,不過對象更多的是通過一種特殊的直接量語法來創(chuàng)建。用構造函數也可以定義一個與之等價的正則表達式,代碼如下正則表達式的模式規(guī)則是由一個字符序列組成的。 正則表達式的模式匹配 正則表達式(regular expression)是一個描述字符模式的對象。javascript的RegExp對象表示正則表達式,String和Reg...
摘要:如果遇到非常的復雜的匹配,正則表達式的優(yōu)勢就更加明顯了。關于正則表達式書寫規(guī)則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達式匹配的子串,并返回替換后的字符串。結語正則表達式并不難,懂了其中的套路之后,一切都變得簡單了。 前言 在正文開始前,先說說正則表達式是什么,為什么要用正則表達式?正則表達式在我個人看來就是一個瀏覽器可以識別的規(guī)則,有了這個規(guī)則,瀏覽器就可以幫我們判斷...
摘要:引用就是允許在同一個正則表達式的后部引用前面的子表達式。這個數字制定了帶圓括號的子表達式在正則表達式中的位置。對正則表達式中前一個子表達式的引用,并不是指對子表達式模式的引用,而是指與那個模式匹配的文本的引用。 前言 本文主要是在讀《JavaScript高級程序語言設計》一書有關正則表達式的章節(jié)的知識點記錄,方便后續(xù)查閱。 什么是正則表達式 正則表達式是用來描述字符組合的某種規(guī)則。它可...
Javascript的正則表達式是前端中比較重要的部分,正則表達式主要用于字符串處理,表單驗證等場合,實用高效,文章主要對JavaScript中的正則的學習與總結 正則表達式的定義 正則表達式:是一個描述字符模式的對象,JavaScrip中正則表達式用RegExp對象表示,可以使用RegExp構造函數來創(chuàng)建正則對象 正則表達式的創(chuàng)建 1.字面量創(chuàng)建 var reg = /[a-z]/; 2.構...
閱讀 1527·2023-04-26 00:20
閱讀 1122·2023-04-25 21:49
閱讀 803·2021-09-22 15:52
閱讀 578·2021-09-07 10:16
閱讀 972·2021-08-18 10:22
閱讀 2665·2019-08-30 14:07
閱讀 2237·2019-08-30 14:00
閱讀 2651·2019-08-30 13:00