成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript學(xué)習(xí)總結(jié)(八)正則表達(dá)式

trilever / 1980人閱讀

摘要:首先推薦幾個(gè)正則表達(dá)式編輯器正則表達(dá)式是一種查找以及字符串替換操作。此表所列的常用正則表達(dá)式,除個(gè)別外均未在前后加上任何限定,請(qǐng)根據(jù)需要,自行處理。例如對(duì)而言,則采用一對(duì)引號(hào)來(lái)確定正則表達(dá)式的邊界。

這篇文章本來(lái)很早就要寫(xiě)的,拖了挺久的,現(xiàn)在整理下,供大家學(xué)習(xí)交流哈!

基本概念

正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱(chēng)為“元字符”)。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。

首先推薦幾個(gè)正則表達(dá)式編輯器
Debuggex :https://www.debuggex.com/
PyRegex:http://www.pyregex.com/
Regexper:http://www.regexper.com/

正則表達(dá)式是一種查找以及字符串替換操作。正則表達(dá)式在文本編輯器中廣泛使用,比如正則表達(dá)式被用于:

檢查文本中是否含有指定的特征詞
找出文中匹配特征詞的位置
從文本中提取信息,比如:字符串的子串
修改文本

說(shuō)明:正則表達(dá)式通常用于兩種任務(wù):1.驗(yàn)證,2.搜索/替換。用于驗(yàn)證時(shí),通常需要在前后分別加上^和$,以匹配整個(gè)待驗(yàn)證字符串;搜索/替換時(shí)是否加上此限定則根據(jù)搜索的要求而定,此外,也有可能要在前后加上而不是^和$。此表所列的常用正則表達(dá)式,除個(gè)別外均未在前后加上任何限定,請(qǐng)根據(jù)需要,自行處理。

優(yōu)先權(quán)順序

在構(gòu)造正則表達(dá)式之后,就可以象數(shù)學(xué)表達(dá)式一樣來(lái)求值,也就是說(shuō),可以從左至右并按照一個(gè)優(yōu)先權(quán)順序來(lái)求值。 下表從最高優(yōu)先級(jí)到最低優(yōu)先級(jí)列出各種正則表達(dá)式操作符的優(yōu)先權(quán)順序:

操作符 描述
轉(zhuǎn)義符
(), (?:), (?=), [] 圓括號(hào)和方括號(hào)
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
字符類(lèi)匹配
字符 匹配
[...] 方括號(hào)內(nèi)的任意字符
1 不在方括號(hào)內(nèi)的任意字符
. 除了換行符和其他Unicode行終止符之外的任意字符
w 任何ASCII字符組成的單詞,等價(jià)于[a-zA-Z0-9]
W 任何不是ASCII字符組成的單詞,等價(jià)于2
s 任何Unicode空白符
S 任何非Unicode空白符的字符
d 任何ASCII數(shù)字,介于[0-9]
D 除了ASCII數(shù)字之外的任何字符,等價(jià)于3
 退格直接量
重復(fù)字符匹配
字符 匹配
{n,m} 匹配前一項(xiàng)至少n次,但不能超過(guò)m次
{n,} 匹配前一項(xiàng)n次或更多次
{n} 匹配前一項(xiàng)n次
? 匹配前一項(xiàng)0次或者1次,也就是說(shuō)前一項(xiàng)是可選的,等價(jià)于{0,1}
+ 匹配前一項(xiàng)1次或多次,等價(jià)于{1,}
* 匹配前一項(xiàng)0次或多次,等價(jià)于{0,}
字符類(lèi):錨字符 匹配
元字符/元符號(hào) 匹配
$ 匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾
^ 匹配字符串的開(kāi)頭,在多行檢索中,匹配一行的開(kāi)頭
A 只有匹配字符串開(kāi)始處
 匹配單詞邊界,詞在 []內(nèi)時(shí)無(wú)效
B 匹配非單詞邊界
G 匹配當(dāng)前搜索的開(kāi)始位置
 匹配字符串結(jié)束處或行尾
z 只匹配字符串結(jié)束處
字符類(lèi):記錄字符 匹配
元字符/元符號(hào) 匹配情況
(string) 用于反向引用的分組
1 或$1 匹配第一個(gè)分組中的內(nèi)容
2 或$2 匹配第二個(gè)分組中的內(nèi)容
3 或$3 匹配第三個(gè)分組中的內(nèi)容
正則表達(dá)式修飾符
字符      含義
i        執(zhí)行不區(qū)分大小寫(xiě)的匹配
g        執(zhí)行一個(gè)全局匹配,即找到所有匹配而非一次匹配
m        多行匹配模式,^匹配一行的開(kāi)頭和字符串開(kāi)頭,$匹配行的結(jié)束和字符串的結(jié)尾
RegExp的方法

RegExp 對(duì)象有 3 個(gè)方法:test()、exec() 以及 compile()。

test():檢索字符串中的指定值。返回值是布爾值。
exec():返回一個(gè)數(shù)組,數(shù)組中的第一個(gè)條目是第一個(gè)匹配,其他的是反向引用

compile() 既可以改變檢索模式,也可以添加或刪除第二個(gè)參數(shù)。 
String 對(duì)象中的正則表達(dá)式方法
方法 含義
match(pattern) 返回 pattern 中的子串或 null
replace(pattern, replacement) 用 replacement 替換 pattern
search(pattern) 返回字符串中 pattern 開(kāi)始位置
split(pattern) 返回字符串按指定 pattern 拆分的數(shù)組
建立正則表達(dá)式

構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與操作符將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式。
可以通過(guò)在一對(duì)分隔符之間放入表達(dá)式模式的各種組件來(lái)構(gòu)造一個(gè)正則表達(dá)式。

對(duì) js 而言,分隔符為一對(duì)正斜杠 (/) 字符。例如:

/expression/

對(duì) VBScript 而言,則采用一對(duì)引號(hào) ("") 來(lái)確定正則表達(dá)式的邊界。例如:

"expression"
看個(gè)例子
//匹配帳號(hào)是否合法(字母開(kāi)頭,允許5-16字節(jié),允許字母數(shù)字下劃線
    var re =new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,19}$");
       `if(re.test(aaaa)){
            alert("格式正確");
        }else{
        alert("格式錯(cuò)誤");
    }

正則表達(dá)式的組件可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

match 方法
/*使用 match 方法獲取獲取匹配數(shù)組*/ 
var pattern = /box/ig;//全局搜索 
var str = "This is a Box!,That is a Box too"; 
alert(str.match(pattern)); //匹配到兩個(gè) Box,Box
console.log(str.match(pattern).length);//獲取數(shù)組的長(zhǎng)度
search方法
/*使用 search 來(lái)查找匹配數(shù)據(jù)*/
var pattern = /box/ig;
var str = "This is a Box!,That is a Box too"; 
console.log(str.search(pattern));//查找到返回位置,否則返回 -1 

PS:因?yàn)?search 方法查找到即返回,也就是說(shuō)無(wú)需 g 全局

replace方法
/*使用 replace 替換匹配到的數(shù)據(jù)*/
var pattern = /box/ig;
var str = "This is a Box!,That is a Box too"; 
console.log(str.replace(pattern, "Cat"));//將 Box 替換成了 Cat
split方法
/*使用 split 拆分成字符串?dāng)?shù)組*/

 var pattern = / /ig;
 var str = "This is a Box!,That is a Box too";         
 console.log(str.split(pattern));//將空格拆開(kāi)分組成數(shù)組
exec方法
/* 統(tǒng)計(jì)子字符串出現(xiàn)的所有位置*/

function count(str){
    var b,r=/def/g;
    while(b = r.exec(str)){
        console.log(b);
    }
}
count("abcdefabcdefabcdefabcdef");

輸出:

[ "def", index: 3, input: "abcdefabcdefabcdefabcdef" ]
[ "def", index: 9, input: "abcdefabcdefabcdefabcdef" ]
[ "def", index: 15, input: "abcdefabcdefabcdefabcdef" ]
[ "def", index: 21, input: "abcdefabcdefabcdefabcdef" ]

 
正則表達(dá)式選擇

一個(gè)正則表達(dá)式選擇包含1個(gè)或多個(gè)正則表達(dá)式序列。這些序列被豎線(|)字符分隔。如果這些序列中的任何一項(xiàng)符合匹配條件,那么這個(gè)選擇就被匹配。他會(huì)按順序依次匹配

 "into".match(/in | int/);

以上將在into中匹配in。但他不會(huì)匹配int,因?yàn)?b>in已經(jīng)匹配成功了。

正則表達(dá)式轉(zhuǎn)義
 / [ ] () { }  ? + * | . ^ $

如果希望按字面去匹配上面的字符,那么必須用一個(gè)前綴來(lái)進(jìn)行轉(zhuǎn)義。前綴不能使字母或數(shù)字字面化。

f : 換頁(yè)符

 : 換行符

 : 回車(chē)符
	 : 制表(tab)符

^    匹配 ^ 符號(hào)本身

$    匹配 $ 符號(hào)本身

.    匹配小數(shù)點(diǎn)(.)本身
實(shí)例
String.prototype.trim = function () {
    return this.replace(/(^s*)|(s*$)/g,"");
};

^表示字符串必須以后面的規(guī)則開(kāi)頭,而(^s*) 表示的就是以0個(gè)空格或者多個(gè)空格開(kāi)頭,后面的(s*$) 的意思就是, 以0個(gè)空格或者多個(gè)空格結(jié)尾。

匹配特定字符串
    ^[A-Za-z]+$  //匹配由26個(gè)英文字母組成的字符串
    ^[A-Z]+$  //匹配由26個(gè)英文字母的大寫(xiě)組成的字符串
    ^[a-z]+$  //匹配由26個(gè)英文字母的小寫(xiě)組成的字符串
    ^[A-Za-z0-9]+$  //匹配由數(shù)字和26個(gè)英文字母組成的字符串
    ^w+$  //匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串

評(píng)注:最基本也是最常用的一些表達(dá)式

思維導(dǎo)圖

... ?

a-zA-Z0-9 ?

0-9 ?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/85297.html

相關(guān)文章

  • 重學(xué)前端學(xué)習(xí)筆記(二十七)--JavaScript的詞法

    摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...

    jayzou 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十七)--JavaScript的詞法

    摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...

    Hegel_Gu 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十七)--JavaScript的詞法

    摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...

    MageekChiu 評(píng)論0 收藏0
  • javascript正則達(dá)式總結(jié)

    摘要:如果你知道正則表達(dá)式模式將會(huì)改變,或者你事先不知道什么模式,而是從另一個(gè)來(lái)源獲取,如用戶(hù)輸入,這些情況都可以使用構(gòu)造函數(shù)。 為什么要使用正則表達(dá)式 正則表達(dá)式通過(guò)由普通字符和特殊字符組成的文字模板完成對(duì)字符串的校驗(yàn),搜索,替換。在javascript中類(lèi)似這樣 /^1d{10}$/ 上面的這個(gè)簡(jiǎn)單的正則用來(lái)匹配手機(jī)號(hào)至于說(shuō)正則表達(dá)式到底有什么意義,借由《精通正則表達(dá)式》里面的一句話來(lái)概...

    impig33 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<