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

資訊專欄INFORMATION COLUMN

JavaScript || 正則表達(dá)式

edgardeng / 2033人閱讀

摘要:方法的參數(shù)正則表達(dá)式是變量,必須使用方式創(chuàng)建方法的第二個(gè)參數(shù)可以是回調(diào)函數(shù),其參數(shù)是每次匹配成功獲取的字符串。

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

學(xué)習(xí)之前,多想想為什么要使用正則表達(dá)式,有助于理解。

正則表達(dá)式regular expression使用單個(gè)字符串來描述某個(gè)句法規(guī)則,計(jì)算機(jī)根據(jù)規(guī)則去匹配字符串中的內(nèi)容。

正則表達(dá)式的性能高于常規(guī)字符串操作(省略循環(huán)、遍歷等操作)

正則表達(dá)式僅用于字符串的操作

2 常規(guī)字符串操作與正則表達(dá)式的比較

要提取出字符串中"ashx521dasbx34sasdz275dasdzxd897"中連續(xù)的數(shù)字,并將結(jié)果保存在數(shù)組中["521", "34", "275", "897"]

傳統(tǒng)字符串操作:需要遍歷整個(gè)字符串,判斷每個(gè)字符是否在"0"-"9"之間再進(jìn)行相應(yīng)的操作

/**
 * 使用一個(gè)暫時(shí)變量tmp保存連續(xù)為數(shù)值時(shí)的字符串,間斷后再統(tǒng)一加入數(shù)組內(nèi);
 * 可能會出現(xiàn)最后一位是數(shù)字的情況,所以使用i<=str.length多走一次循環(huán)的else路徑,將最后一組數(shù)組加入數(shù)組
 * 
 */
function findNum_two(str) {
    var arr = [];
    var tmp = "";
    // 遍歷字符串,取出需要的數(shù)字
    for(var i=0; i<=str.length; i++) {   
        if(str.charAt(i) <= "9" && str.charAt(i) >= "0") {
            tmp += str[i];
        } else {
            if(tmp) {   // 如果tmp不為空
                arr.push(tmp);
                tmp = "";
            }
        }
    }

    return arr;
}
console.log(findNum_two(str));    //  [ "521", "34", "275", "897" ]

使用正則表達(dá)式:只需使用字符串的match()方法去匹配指定的規(guī)則(正則表達(dá)式即可)

function findNum (str) {
    return str.match(/d+/g);
}

console.log(findNum(str));   // [ "521", "34", "275", "897" ]

3 正則表達(dá)式寫法

字面量寫法:var re = /d+/gi;

構(gòu)造函數(shù)寫法:var re = new RegExp("d+", "gi");注意兩個(gè),因?yàn)镴avaScript中需要轉(zhuǎn)義

3.1 正則表達(dá)式中的轉(zhuǎn)義字符

轉(zhuǎn)義字符:多帶帶使用字母本身有意義;在前面加上后改變原有意義

3.2 量詞

用來描述相鄰的前面的單個(gè)字符匹配規(guī)則出現(xiàn)的次數(shù)

量詞使用{a, b}表示,其中b可以省略,意義不同

3.3 字符類

使用[]描述一類字符,整體只代表一個(gè)字符,表示該字符在某個(gè)范圍內(nèi)。

/a[0-9]c/匹配三位字符串,第一位是a,第三位是c,第二位是"0"-"9"之間的任何一位都可以匹配成功

[]多種規(guī)則是或 |的關(guān)系:[0-9a-zA-Z]

整個(gè)字符類[0-9a-zA-Z]只代表一位字符

注意,字符類中的^表示非的意思,不在某個(gè)范圍內(nèi)[^d]表示非數(shù)字的字符

3.4 修飾符

g--global:全局匹配,找到所有的匹配項(xiàng),不是在第一個(gè)匹配后停止

i--ignored:忽略大小寫

m:多行,將開始字符^和結(jié)束字符$視為在多行上工作(每匹配一行的開始和結(jié)束以 分割)

u:將模式視為Unicode序列點(diǎn)的序列

3.5 匹配子項(xiàng)

對于復(fù)雜的正則表達(dá)式,可以使用()將其拆分為多個(gè)部分,replace(re, fn)回調(diào)函數(shù)中可以簡化匹配內(nèi)容的操作

var re = /(d+)(w)(S)/;

fn($0, $1, $2 ...)

$0代表正則表達(dá)式本身匹配到的內(nèi)容:(d+)(w)(S)

$1代表正則表達(dá)式的第一個(gè)匹配子項(xiàng):(d+)

$2代表正則表達(dá)式第二個(gè)匹配子項(xiàng):(w)

...

3.6 重復(fù)子項(xiàng)

主要用于匹配字符串中重復(fù)的字符

var re = /(a)(b)(c)1/;1表示重復(fù)的第一個(gè)子項(xiàng)(b),第4個(gè)位置的字符與第1個(gè)位置的字符相同

var re = /(a)(b)(c)2/;2表示重復(fù)的第二個(gè)子項(xiàng)(b),第4個(gè)位置的字符與第2個(gè)位置的字符相同

var re = /(a)(b)(c)3/;3表示重復(fù)的第三個(gè)子項(xiàng)(c),第4個(gè)位置的字符與第3個(gè)位置的字符相同

...

3.7 邏輯或|

使用|代表邏輯或,|左右兩個(gè)操作數(shù)只要有一個(gè)滿足要求即可

3.8 開始、結(jié)束標(biāo)記

不在[]中使用^,^表示以最近的匹配字符規(guī)則開始整個(gè)匹配;

$表示以最近的匹配規(guī)則結(jié)束匹配

作用范圍只是^之后的第一個(gè)子項(xiàng);$前的第一個(gè)子項(xiàng)

4 正則表達(dá)式的方法

主要有4中方法用于操作正則表達(dá)式:

match()、replace()、search()是字符串的操作方法

test()exec()是正則表達(dá)式對象的操作方法

4.1 test()

根據(jù)RegExp去匹配字符串,如果匹配成功,返回true;匹配失敗返回false。主要用于邏輯判斷

var str = "abxe2312dafxz";
var re = /d+/;

re.test(str);   // true
4.2 search()

根據(jù)RegExp去匹配字符串,返回第一個(gè)匹配成功字符串的首字符的索引;匹配失敗返回-1。用于查找字符的索引,類似字符串的indexOf()方法

str.search(re)

4.3 match()

根據(jù)RegExp去匹配字符串,如果匹配成功,將匹配的結(jié)果保存在數(shù)組中返回;匹配失敗返回null。默認(rèn)第一次匹配后便停止繼續(xù)匹配,使用修飾符g進(jìn)行全局匹配

str.match(re)

4.4 replace(re, newstr)方法

根據(jù)RegExp去匹配字符串,如果匹配成功,將匹配的字符串更換為新的字符串newstr。

replace()方法的參數(shù)re正則表達(dá)式是變量,必須使用new RegExp()方式創(chuàng)建re

var str = "a23gb";
var re = /d+/;

str.replace(re, "xy");   //  "axygb"

replace()方法的第二個(gè)參數(shù)可以是回調(diào)函數(shù),其參數(shù)是每次匹配成功獲取的字符串。每次匹配成功都會執(zhí)行一次回調(diào)函數(shù)

5 實(shí)踐 5.1 找到一個(gè)字符串中出現(xiàn)次數(shù)最多的字符及其出現(xiàn)的次數(shù)
var str = "1231asdaegj71836178asdhasssasalsdhdzxbczaslazxcnnffajshdhgagsgdssssasdzzxda";

var str = str.split("").sort().join("");   // 按順序的字符序列

var re = /(w)1+/g;

var length = 0;
var val = "";   // 保存出現(xiàn)次數(shù)最多的字符

// $0代表每次匹配到的字符,$1代表第一個(gè)正則表達(dá)式子項(xiàng)(w)
str.replace(re, function ($0, $1) {  // 可以將匹配的字符當(dāng)做變量操作
    if($0.length > length) {
        length = $0.length;
        val = $1;    // $1代表每次匹配的字符
    }
});
console.log(length);
console.log(val);
5.2 去掉字符串前后的空格

var re = /^s+|s+$/g;,使用字符串應(yīng)用正則即可:str.replace(re, "")

5.3 常用正則匹配規(guī)則

QQ號:var re = /^[1-9]d{4,11}$/; :第一位是1-9中的數(shù)字,最后也是數(shù)字,總共5-12位

中文匹配:var re = /[u4e00-u9fa5]/;:使用Unicode編碼進(jìn)行匹配

emailvar re = /w+@[a-z0-9]+(.[a-z]+){1,3}/;:可能出現(xiàn).com.cn.net

身份證:var re = /[1-9]d{14}|[1-9]d{17}|[1-9]d{16}x/i;

郵編:var re = /[1-9]d{5}/;

5.3 將常用正則表達(dá)式封裝在一個(gè)對象中便于使用
var re = {
    email: /w+@[a-z0-9]+(.[a-z]+){1,3}/,
    chinese: /[u4e00-u9fa5]/,
    qq: /^[1-9]d{4,11}$/,
    id: /[1-9]d{14}|[1-9]d{17}|[1-9]d{16}x/i,
    trim: /^s+|s+$/
}

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

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

相關(guān)文章

  • 正則達(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正則達(dá)式的匹配模式

    摘要:選擇分組和引用正則表達(dá)式的語法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...

    wqj97 評論0 收藏0
  • JS正則達(dá)式入門,看這篇就夠了

    摘要:如果遇到非常的復(fù)雜的匹配,正則表達(dá)式的優(yōu)勢就更加明顯了。關(guān)于正則表達(dá)式書寫規(guī)則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達(dá)式匹配的子串,并返回替換后的字符串。結(jié)語正則表達(dá)式并不難,懂了其中的套路之后,一切都變得簡單了。 前言 在正文開始前,先說說正則表達(dá)式是什么,為什么要用正則表達(dá)式?正則表達(dá)式在我個(gè)人看來就是一個(gè)瀏覽器可以識別的規(guī)則,有了這個(gè)規(guī)則,瀏覽器就可以幫我們判斷...

    wenzi 評論0 收藏0
  • JavaScript 中的正則達(dá)式

    摘要:正則表達(dá)式的意義中的正則表達(dá)式使用表示,可以使用構(gòu)造函數(shù)來創(chuàng)建對象,不過對象更多的是通過一種特殊的直接量語法來創(chuàng)建。用構(gòu)造函數(shù)也可以定義一個(gè)與之等價(jià)的正則表達(dá)式,代碼如下正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的。 正則表達(dá)式的模式匹配 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。javascript的RegExp對象表示正則表達(dá)式,String和Reg...

    _Dreams 評論0 收藏0
  • JavaScript中的正則達(dá)式

    Javascript的正則表達(dá)式是前端中比較重要的部分,正則表達(dá)式主要用于字符串處理,表單驗(yàn)證等場合,實(shí)用高效,文章主要對JavaScript中的正則的學(xué)習(xí)與總結(jié) 正則表達(dá)式的定義 正則表達(dá)式:是一個(gè)描述字符模式的對象,JavaScrip中正則表達(dá)式用RegExp對象表示,可以使用RegExp構(gòu)造函數(shù)來創(chuàng)建正則對象 正則表達(dá)式的創(chuàng)建 1.字面量創(chuàng)建 var reg = /[a-z]/; 2.構(gòu)...

    _Zhao 評論0 收藏0
  • 簡單說 正則達(dá)式——要注意lastIndex屬性

    摘要:返回是一個(gè)只讀的布爾值,看這個(gè)正則表達(dá)式是否帶有修飾符。方法,它的參數(shù)是一個(gè)字符串,用對某個(gè)字符串進(jìn)行檢測,如果包含正則表達(dá)式的一個(gè)匹配結(jié)果,則返回,否則返回??偨Y(jié)這次主要是說說,中正則表達(dá)式對象的個(gè)屬性,而最需要注意的就是屬性了。 說明 這篇文章,主要和大家聊聊JavaScript中RegExp對象的屬性。 解釋 每個(gè)RegExp對象都包含5個(gè)屬性,source、global、ign...

    jokester 評論0 收藏0

發(fā)表評論

0條評論

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