成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS正則表達(dá)式語法

DC_er / 729人閱讀

摘要:正則表達(dá)式語法正則表達(dá)式是由普通字符例如數(shù)字字母標(biāo)點(diǎn)和用來表示特定字符或字符集的元字符以及特殊字符用作限定條件或特殊功能的字符組成的文字模式。正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。

正則表達(dá)式語法

正則表達(dá)式是由普通字符(例如數(shù)字、字母、標(biāo)點(diǎn)和用來表示特定字符或字符集的元字符)以及特殊字符(用作限定條件或特殊功能的字符)組成的文字模式。

普通字符

所有數(shù)字、小寫字母、大寫字母、標(biāo)點(diǎn)都屬于普通字符。

而為了匹配除以上列出的字符集以外的字符,或者匹配特定范圍內(nèi)的任意字符,需要使用元字符。元字符分直接量字符和字符類。

直接量字符
字符 描述
uXXXX 由16進(jìn)制數(shù)XXXX指定的unicode字符
xNN 由16進(jìn)制數(shù)NN指定的拉丁字符
o NUL字符(u0000)
t 制表符(u0009)
n 換行符(u000A)
v 垂直制表符(u000B)
f 換頁符(u000C)
r 回車符(u000D)
字符類元字符

字符類元字符用來匹配特定范圍內(nèi)的字符。一個字符類可以匹配它所包含的任意字符。

字符 描述
. 除了換行和行結(jié)束符之外的所有單個字符
w 等價于[0-9a-zA-Z]
W 除了w以外的所有字符
s 任何Unicode空白符
S 任何非Unicode空白符的字符(范圍比w大)
d 等價于[0-9]
D 除了d以外的所有字符
[...] 方括號內(nèi)的任意字符
1 除了方括號內(nèi)字符集的任意字符
特殊字符 重復(fù)

當(dāng)需要匹配多個指定的字符時,需要用到一些專門的特殊字符來表示重復(fù)匹配的次數(shù)。

字符 描述
{n,m} 匹配至少n次,但不能超過m次
{n,} 匹配至少n次,無上限
{n} 匹配n次
? 匹配0次或1次,等價于{0,1}
+ 匹配1次或多次,無上限,等價于{1,}
* 匹配0次或多次,無上限,等價于{0,}

重復(fù)字符需要與普通字符配合使用,如[a-z]{3,5},即匹配3個到5個小寫字母。

錨字符

當(dāng)需要匹配以指定字符開頭或結(jié)尾的字符串時,需要用到錨字符。

字符 描述
^ 匹配字符串的開頭,在多行檢索中,匹配一行的開頭
$ 匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾
(?=p) 零寬正向先行斷言,要求接下來的字符都與p匹配,匹配結(jié)果不包含p
(?!p) 零寬負(fù)向先行斷言,要求接下來的字符不能和p匹配
b 匹配一個字邊界(需要和其他表達(dá)式配合使用,多帶帶使用[b]表示退格符)
B 匹配一個非字邊界

例:需要匹配以字母、下劃線或$開頭的字符串來校驗(yàn)變量名是否合法,可以使用/^[a-zA-Z_$].*/

注:^在方括號[]內(nèi)部表示反向匹配。

零寬先行斷言可以將任何正則表達(dá)式都做為結(jié)尾錨點(diǎn),q(?=p)表示匹配所有以p結(jié)尾的q字符串,匹配結(jié)果僅包含q部分,不包含錨點(diǎn)p。

例:匹配以”.”結(jié)尾的字符串,可以使用/w+(?=.)/g
則匹配"a.b.c.d.e.f"的結(jié)果為["a","b","c","d","e"]。f后沒有.,所以不被匹配。

q(?!p)表示匹配所有不以p結(jié)尾的q字符串。

注:javascript不支持后行斷言,即不能將正則表達(dá)式作為開始錨點(diǎn)。

b可以用來匹配一個單詞的開頭或結(jié)尾。例:匹配String中的Str用/bStr/,匹配String中的ing用/ingb/

B可用來匹配一個單詞的中間部分。例:匹配String中的trin用/BtrinB/

選擇、分組和引用字符
字符 描述
| 選擇匹配,“|”左邊的表達(dá)式和右邊的表達(dá)式皆可匹配
(...) 分組匹配,將幾個項(xiàng)組合為一個單元,這個單元可以用"*","+","?","|","{n,m}"等符號加以修飾。而且可以記住和這個組合相匹配的字符。
(?:...) 非捕獲性分組,只負(fù)責(zé)匹配,不記憶與該組相匹配的字符

(?:...)和(...)的差異僅僅存在與匹配結(jié)果,當(dāng)需要記錄某一部分匹配項(xiàng)時,用(...)。若只是用來匹配,后續(xù)不需要使用分組匹配到的字符串,則用(?:...)

轉(zhuǎn)義字符
字符 描述
RegExp使用 RegExp實(shí)例化方法

RegExp實(shí)例化有兩張方式。一種通過字面量實(shí)例化,一種通過new RegExp()構(gòu)造函數(shù)實(shí)例化

var exp = / pattern / flags;  //RegExp字面量
var exp = new RegExp("pattern","flags");    //RegExp構(gòu)造函數(shù)

flags用來表示正則表達(dá)式的行為??蛇x項(xiàng)有g(shù),i,m三個標(biāo)識,可同時定義一個或多個標(biāo)識。

g:global,表示全局模式。flags中包含g時,表達(dá)式匹配所有能夠匹配上的字符串;如果沒包含g時,則當(dāng)匹配到第一個字符串時,即停止匹配。

i:case-insentive,表示忽略大小寫。flags中包含i時,表達(dá)式匹配時忽略字符串的大小寫。

m:multi-line,表示多行匹配。flags中包含m時,表達(dá)式匹配到一行文本末尾時還會繼續(xù)查找下一行中是否存在匹配項(xiàng)。

pattern即正則表達(dá)式語句。

RegExp構(gòu)造函數(shù)優(yōu)勢在于可以動態(tài)傳入正則表達(dá)式。

RegExp實(shí)例屬性 global

boolean值,表示是否設(shè)置了g標(biāo)志。

ignoreCase

boolean值,表示是否設(shè)置了i標(biāo)志。

multiline

boolean值,表示是否設(shè)置了m標(biāo)志。

source

正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。

lastIndex

整數(shù),表示開始搜索下一個匹配項(xiàng)的字符位置,從0 算起。

例:

var exp = /[bc]at/gi;
exp.global;//true
exp.ignoreCase;//true
exp.multiline;//false
exp.source;//“[bc]at”
RegExp實(shí)例方法 exec()

exec方法接受一個參數(shù),即需要應(yīng)用模式的字符串,然后返回包含第一個匹配項(xiàng)信息的數(shù)組,或者在沒有匹配項(xiàng)時返回null。返回的數(shù)組是Array實(shí)例,但還包含額外兩個屬性:index和input。

一句句解釋。

返回包含第一個匹配項(xiàng)信息的數(shù)組,或者在沒有匹配項(xiàng)時返回null:

這里分兩種情況,一種是global匹配,一種是非global匹配。

global模式執(zhí)行exec()匹配成功一次以后,再次執(zhí)行exec()時,會從前一次匹配的最后一位開始繼續(xù)向后匹配。例:

var exp = /.at/g
var matches = exp.exec("cat, bat, sat, fat"); //第一次匹配
matches.index => 0
matches.input => "cat, bat, sat, fat"
matches => ["cat"]
exp.lastIndex => 3
matches = exp.exec("cat, bat, sat, fat"); //第二次匹配
matches.index => 5
matches.input => "cat, bat, sat, fat"
matches => ["bat"]
exp.lastIndex => 8
...

非global模式執(zhí)行exec()匹配成功一次以后,再次執(zhí)行exec()時,會從頭開始重新匹配。

var exp = /.at/
var matches = exp.exec("cat, bat, sat, fat"); //第一次匹配
matches.index => 0
matches.input => "cat, bat, sat, fat"
matches => ["cat"]
exp.lastIndex => 0
matches = exp.exec("cat, bat, sat, fat"); //第二次匹配
matches.index => 0
matches.input => "cat, bat, sat, fat"
matches => ["cat"]
exp.lastIndex => 0

返回的數(shù)組是Array實(shí)例:

當(dāng)使用(...)分組匹配時,一次exec()會匹配到多個結(jié)果

var exp = /(there)s+(you)s+(are)/;
var matches = exp.exec("hey, there you are my dear");
matches = ["there you are", "there", "you", "are"];

matches[0]匹配整個表達(dá)式字符串。
matches[1]匹配第一個(...)內(nèi)的字符串,之后以此類推。

補(bǔ)充說明:含(?:...)非捕獲分組的表達(dá)式執(zhí)行exec后返回的數(shù)組中不包含(?:...)匹配的字符串。非捕獲性分組(?:...)和捕獲性分組(...)的區(qū)別就在這里。

屬性index和input:
index表示匹配項(xiàng)在字符串中的起始位置。
input表示應(yīng)用正則表達(dá)式的字符串。

test()

test方法接受一個參數(shù)作為需要應(yīng)用模式的字符串,在模式與該參數(shù)匹配的情況下返回true,否則返回false。在只想知道目標(biāo)字符串與某個模式是否匹配,但不需要知道其文本內(nèi)容的情況下,使用這個方法非常方便。因此,test()方法經(jīng)常被用在if 語句中。

用于模式匹配的string方法

string有四個方法可以將正則表達(dá)式作為參數(shù)傳入。

search()

str.search(exp)返回str中第一個與exp表達(dá)式匹配的字符串的起始位置。如果找不到匹配項(xiàng),返回-1。如果search傳入的參數(shù)是一個string,則首先會通過RegExp構(gòu)造函數(shù)將其轉(zhuǎn)換為正則表達(dá)式。search不支持全局搜索,它會忽略global標(biāo)識。

"JavaScript".search(/script/i) => 4
replace()

str.replace(exp, replaceStr)第一個參數(shù)是一個正則表達(dá)式,第二個參數(shù)是要替換成的字符串。如果exp帶有g(shù)lobal標(biāo)識,那么源字符str中所有與exp表達(dá)式匹配的子串都會被替換。如果不帶g,str中僅第一個與exp匹配的子串會被替換。

text.replace(/javascript/gi, "JS") //將text全文中所有javascript改為JS

replaceStr中如果出現(xiàn)$加數(shù)字N的字符串,表示第N個子表達(dá)式相匹配的文本。

text.replace(/"([^"]*)"/g, ""$1"") //將text全文中所有被""引用的子串替換成被""引用。
match()

str.match(exp)返回一個由匹配結(jié)果組成的數(shù)組。

該數(shù)組不同于RegExp實(shí)例方法exex()返回的數(shù)組。當(dāng)有g(shù)lobal標(biāo)識時,match返回全局匹配到的所有字符串組成的數(shù)組;當(dāng)沒有g(shù)lobal標(biāo)識時,match就返回第一個匹配到的字符串組成的單元素?cái)?shù)組。

"11+2=13".match(/d/g) => ["1","1","2","1","3"]
"11+2=13".match(/d/) => ["1"]

match方法不會返回捕獲性組合匹配到的子串,(...)分組匹配在match方法中不會像RegExp實(shí)例方法exec()一樣返回匹配的子串。

split()

當(dāng)split方法傳入的參數(shù)為正則表達(dá)式時,這使得split()方法異常強(qiáng)大。例如,可以指定分隔符,允許兩邊可以留有任意多的空白符:

"1   ,  ,2 , 3  ,   4  ,  5".split(/s*,s*/) => ["1","2","3","4","5"]

... ?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80112.html

相關(guān)文章

  • JS正則達(dá)式一條龍講解,從原理和語法JS正則、ES6正則擴(kuò)展,最后再到正則實(shí)踐思路

    摘要:控制權(quán)和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權(quán)是指哪一個正則子表達(dá)式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權(quán)就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當(dāng)然用來查也是不錯的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海洋不知所措的時候,總能給你一點(diǎn)思路;正則啊,就像一臺驗(yàn)鈔機(jī),在你不知道用戶提交的鈔票真假的時候,...

    Michael_Lin 評論0 收藏0
  • 正則達(dá)式

    摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號手機(jī)號中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語言里和所有的計(jì)算機(jī)平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...

    bang590 評論0 收藏0
  • JavaScript正則庫:XRegExp

    摘要:它的語法是被匹配字符串一個正則組成的數(shù)組,比如,,該方法返回與匹配鏈條正則數(shù)組最后一個正則的匹配內(nèi)容,或一個空數(shù)組。 好像網(wǎng)上介紹JS正則庫的文章不多,可能也是因?yàn)閺?fù)雜的正則匹配很少需要在客戶端運(yùn)行,所以JS上用的不多,并且我搜JS的正則庫還真沒找到第二個,囧。但它的一些特性挺實(shí)用,有興趣的同學(xué)可以看看。由于沒花太多時間去琢磨,所以本文只將該庫作簡要介紹,本文用例全部來自它的API文檔...

    incredible 評論0 收藏0
  • 『不再迷茫 - 正則達(dá)式JS正則要點(diǎn)梳理 持續(xù)更新

    摘要:寫在前面正在看的源碼看到了部分感覺以前看的正則表達(dá)式基礎(chǔ)知識已經(jīng)完全不夠用了現(xiàn)翻閱博客資料將一些中正則表達(dá)式難用的部分總結(jié)歸納方便自己和友翻閱正則分組重復(fù)匹配對于重復(fù)的匹配我們經(jīng)常使用到正則表達(dá)式的分組功能我們使用正則匹配地址來實(shí)踐一下假 [TOC] 寫在前面 - Lionad 正在看VueJS的源碼, 看到了HtmlParser部分, 感覺以前看的正則表達(dá)式基礎(chǔ)知識已經(jīng)完全不夠用了,...

    SQC 評論0 收藏0
  • 正則達(dá)式前端使用手冊

    摘要:非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。 導(dǎo)讀 你有沒有在搜索文本的時候絞盡腦汁, 試了一個又一個表達(dá)式, 還是不行. 你有沒有在表單驗(yàn)證的時候, 只是做做樣子(只要不為空就好), 然后燒香拜佛, 虔誠祈禱, 千萬不要出錯. 你有沒有在使用sed 和 grep 命令的時候, 感覺莫名其妙, 明明應(yīng)該支持的元字符, 卻就是匹配不到. 甚至,...

    zhoutao 評論0 收藏0
  • 玩轉(zhuǎn)javascript RegExp對象

    摘要:玩轉(zhuǎn)對象中的正則表達(dá)式的正則表達(dá)式語法極大地借鑒了另一種腳本語言的正則表達(dá)式語法對象是的一個內(nèi)置對象,與,類似。創(chuàng)建對象可通過構(gòu)造函數(shù)創(chuàng)建。當(dāng)要根據(jù)用戶輸入來構(gòu)造正則表達(dá)式時,必須采用構(gòu)造函數(shù)方式。如與被看做相同的字符模式。 玩轉(zhuǎn)javascript RegExp對象 js中的正則表達(dá)式 js的正則表達(dá)式語法極大地借鑒了另一種腳本語言Perl的正則表達(dá)式語法.RegExp對象是js的一...

    alexnevsky 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<