国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

簡單學(xué)習(xí) JavaScript 正則表達(dá)式

nevermind / 1126人閱讀

摘要:對于對象,方法返回一個該正則表達(dá)式的字面量。顯示顯示正則表達(dá)式在的應(yīng)用一個在字符串中執(zhí)行查找匹配的方法,它返回一個數(shù)組或者在未匹配到時返回。

為什么要用正則表達(dá)式

簡單的說:我們與字符串接觸的頻率非常之高,正則表達(dá)式可以極大的提高復(fù)雜文本分析的效率,快速匹配出復(fù)雜的字符串。

創(chuàng)建一個正則表達(dá)式

直接量語法(字面量)

var expression = /pattern/flags ;
//pattern 是要匹配的字符串模式
//flags用來標(biāo)記正則表達(dá)式的行為: i 不區(qū)分大小寫;g 表示全局搜索 ;m 表示多行模式
var reg = /ab/i ,表示匹配 字符串 "ab" 不區(qū)分大小寫

調(diào)用RegExp對象的構(gòu)造函數(shù)

//RegExp 是js中一個內(nèi)置的對象,是正則表達(dá)式的縮寫
var expression = new RegExp(pattern,flags)
//flags 和直接量語法一致
//pattern 可以是字符串模式,也可以是一個標(biāo)準(zhǔn)的正則表達(dá)式,后者必須省略 flags
//可以寫成var reg = new RegExp("ab","i")  或者var reg = new RegExp(/ab/i)
//不能寫成 var reg = new RegExp(/ab/,"i")

ES5中規(guī)定:使用直接量必須像直接調(diào)用RegExp構(gòu)造函數(shù)一樣,每次都創(chuàng)建一個新的RegExp實例,所以
上面2種方式創(chuàng)建正則表達(dá)式,除了過程不一樣,效果是一樣的。

RegExp每個實例都有如下屬性:

global:布爾值,表示實例是否設(shè)置了 g 標(biāo)志

ignoreCase:布爾值,表示是否設(shè)置了 i 標(biāo)志

multiLine:布爾值,表示是否設(shè)置了m 標(biāo)志

source:返回創(chuàng)建RegExp對象實例時指定的表達(dá)式純文本字符串。不包含后面的標(biāo)志

lastIndex:整數(shù),表示實例在接下來的一次搜索匹配項的開始位置,默認(rèn)從0開始

使用正則表達(dá)式的實例方法

RegExp.prototype.exec()

exec() 方法為指定的一段字符串執(zhí)行搜索匹配操作,返回包含第一個匹配項的數(shù)組,regexObj.exec(str) ,沒有匹配到則返回 null,返回的數(shù)組是Array的實例,而且返回值還包含另外2個屬性:index: 匹配到的字符位于原始字符串的基于0的索引值input: 原始字符串`

var myRe = /ab*/g;
var str = "abbcdefabh";
var oo = myRe.exec(str)
// oo ==> ["abb"] 
// oo.index ==> 0 
// myRe.lastIndex ==> 0
// 從返回結(jié)果可以看出來,即使我們設(shè)置了全局的g,exec也不會一次性返回所有的匹配結(jié)果
// 因為其定義就是  返回包含`第一個匹配項`的數(shù)組,只要第一次匹配到,后面就不繼續(xù)執(zhí)行
// 我們再執(zhí)行一次
oo = myRe.exec(str)
// oo ==> ["ab"] 
// oo.index ==> 3 
// myRe.lastIndex ==> 3
// 再次執(zhí)行之后可以看到 匹配項和一些屬性值都發(fā)生了變化,說明 這次并不是從頭開始

官方說明:當(dāng)正則表達(dá)式使用 "g" 標(biāo)志時,可以多次執(zhí)行 exec 方法來查找同一個字符串中的成功匹配。當(dāng)你這樣做時,查找將從正則表達(dá)式的 lastIndex 屬性指定的位置開始(也就是說下次的查詢將在上次匹配成功后面開始匹配,而且會循環(huán),在匹配不到的時候,會從頭開始)。(test() 也會更新 lastIndex 屬性)。
不加"g" 標(biāo)志的時候,每次都是從 0 開始,所以各種屬性也不會改變

exec() 方法還有一個重要的作用:匹配捕獲組

var str= "cat2,hat8" ;
var reg=/c(at)/ ;  
console.info(reg.exec(str));//運行返回   ["cat2", "at"]
加了捕獲組的時候,結(jié)果會把捕獲組一起返回,不加則沒有,支持多個捕獲組

注意 IEjavascriptlastIndex 設(shè)計上存在偏差,沒加g的情況下也會每次發(fā)生改變,慎用

RegExp.prototype.test()
接收一個字符串參數(shù),regexObj.exec(str),匹配返回true,否則false

RegExp.prototype.toString() ( RegExp.prototype.toLocaleString())

RegExp 對象覆蓋了 Object 對象的 toString() 方法,并沒有繼承 Object.prototype.toString()。對于 RegExp 對象,toString 方法返回一個該正則表達(dá)式的字面量

myExp = new RegExp("a+b+c");
alert(myExp.toString());       // 顯示 "/a+b+c/"

foo = new RegExp("bar", "g");
alert(foo.toString());         // 顯示 "/bar/g"
正則表達(dá)式在 String 的應(yīng)用

match
一個在字符串中執(zhí)行查找匹配的String方法,它返回一個數(shù)組或者在未匹配到時返回null

var oo = "121212".match(/1/g)
oo
//["1", "1", "1"]
var oo = "121212".match(/1/)
oo
//["1"]

replace
一個在字符串中執(zhí)行查找匹配的String方法,并且使用替換字符串替換掉匹配到的子字符串。

"121212".replace(/1/g,",")
//",2,2,2"

split
一個使用正則表達(dá)式或者一個固定字符串分隔一個字符串,并將分隔后的子字符串存儲到數(shù)組中的String方法。

//以數(shù)字分割字符串
"a1b2c33d4".split(/d*/)
//["a", "b", "c", "d", ""]

search
一個在字符串中測試匹配的String方法,它返回匹配到的位置索引,或者在失敗時返回-1。

//查找連續(xù)2個數(shù)字的位置
"a1b2c33d4".search(/(d){2}/)
// 5
小練習(xí)

把一串?dāng)?shù)字字符串千分位方式(逗號)轉(zhuǎn)化成金額符號

分析要點:

金額的千分位是從右往左,每3位加一個逗號,但是正則表達(dá)式里面從右往左不是很方便,所以第一步要把數(shù)字顛倒過來,字符串并沒有直接的顛倒方法,數(shù)組有,Array.prototype.reverse.call([1,2,3,4]) ==>[4, 3, 2, 1],字符串轉(zhuǎn)數(shù)組也是很方便的,String.prototype.split.call("1234","") ==> ["1", "2", "3", "4"]

再把顛倒的數(shù)組拼接成字符串 Array.prototype.join.call([4,3,2,1],"")==> 4321

小數(shù)點后面的不需要處理,所以我們要獲取 String.prototype.split.call("12345.678",".")[1] ==> 12345 因為我們這里已經(jīng)反轉(zhuǎn)了,所以真正要轉(zhuǎn)化的數(shù)字在第二個

前面都是準(zhǔn)備工作,現(xiàn)在需要用正則表達(dá)式處理字符串,匹配連續(xù)的3位數(shù)字分割成數(shù)組 d{3} 表示連續(xù)3個數(shù)字 String.prototype.match.call("1234",/d{3}/) ==> ["123"],這里把后面的一位數(shù)字和2位數(shù)字直接忽略了,并且沒有全局匹配,所以我們要補(bǔ)充一下。

String.prototype.match.call("1234567891",/d{3}|d{2}|d{1}/g)
//["123", "456", "789", "1"]

最后就把數(shù)組用逗號連接,在用小數(shù)點和之前的小數(shù)位加在一起,再像第一步那樣反轉(zhuǎn)一下順序就可以了。

例子代碼

function money_thousandth (str){
    //先檢查是不是符合數(shù)字類型
    if(isNaN(str)){
        return "必須傳入數(shù)字或者數(shù)字字符串"
    }
    str = str.toString();
    //反轉(zhuǎn)順序并分割小數(shù)點
    var arr = str.split("").reverse().join("").split(".");
    //全局優(yōu)先匹配連續(xù)的3位數(shù)字,或者2位,或者1位
    var reg = /d{3}|d{2}|d{1}/g;
    //有小數(shù)點取第二位,沒有則取第一位
    var thousand = arr[1] || arr[0] ;
    //分割數(shù)組 
    var result_arr =  thousand.match(reg);
    //逗號拼接分割好的金額
    var result_str = result_arr.join(",");
    //與小數(shù)點前面加起來
    var result = arr[1] ?   arr[0] + "."+ result_str  : result_str
    //返回顛倒的數(shù)字字符串
    return result.split("").reverse().join("")
}
money_thousandth(1234567898.12)
//"1,234,567,898.12"
money_thousandth("1234567898.12")
//"1,234,567,898.12"

點擊查看正則表達(dá)式常用語法

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80768.html

相關(guān)文章

  • 正則達(dá)式

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

    bang590 評論0 收藏0
  • JavaScript正則進(jìn)階之路——活學(xué)妙用奇淫正則達(dá)式

    摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個部分是整個表達(dá)式的關(guān)鍵部分。學(xué)習(xí)正則如果還沒有系統(tǒng)學(xué)習(xí)正則表達(dá)式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學(xué)習(xí)。正則表達(dá)式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學(xué)習(xí),共同...

    BearyChat 評論0 收藏0
  • JavaScript正則進(jìn)階之路——活學(xué)妙用奇淫正則達(dá)式

    摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個部分是整個表達(dá)式的關(guān)鍵部分。學(xué)習(xí)正則如果還沒有系統(tǒng)學(xué)習(xí)正則表達(dá)式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學(xué)習(xí)。正則表達(dá)式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學(xué)習(xí),共同...

    APICloud 評論0 收藏0
  • H5學(xué)習(xí)

    摘要:為此決定自研一個富文本編輯器。本文,主要介紹如何實現(xiàn)富文本編輯器,和解決一些不同瀏覽器和設(shè)備之間的。 對ES6Generator函數(shù)的理解 Generator 函數(shù)是 ES6 提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。 JavaScript 設(shè)計模式 ② 巧用工廠模式和創(chuàng)建者模式 我為什么把他們兩個放在一起講?我覺得這兩個設(shè)計模式有相似之處,有時候會一個設(shè)計模式不能滿...

    aristark 評論0 收藏0

發(fā)表評論

0條評論

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