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

資訊專欄INFORMATION COLUMN

正則表達(dá)式

Leck1e / 1649人閱讀

摘要:當(dāng)我們指定標(biāo)志后,每次運(yùn)行,正則表達(dá)式本身會(huì)更新屬性,表示上次匹配到的最后索引使用全局匹配,直到結(jié)束仍沒(méi)有匹配到全局匹配類似搜索,因此不能使用,那樣只會(huì)最多匹配一次。正則表達(dá)式還可以指定標(biāo)志,表示忽略大小寫,標(biāo)志,表示執(zhí)行多行匹配。

如果有對(duì)字符串進(jìn)行匹配的需求。自然會(huì)想到用正則
如 號(hào)碼:010-8123123

var reg = /^d{3}-d{7}$/"
or
var reg = new RegExp("^d{3}-d{7}$");//這種寫法因?yàn)樽址霓D(zhuǎn)譯問(wèn)題需要2個(gè)實(shí)際上是1個(gè)

在正則表達(dá)式中,如果直接給出字符,就是精確匹配。用d可以匹配一個(gè)數(shù)字,w可以匹配一個(gè)字母或數(shù)字,所以:

"00d"可以匹配"007",但無(wú)法匹配"00A";

"ffffd"可以匹配"010";

"ww"可以匹配"js";

.可以匹配任意字符,所以:

"js."可以匹配"jsp"、"jss"、"js!"等等。

要匹配變長(zhǎng)的字符,在正則表達(dá)式中,用*表示任意個(gè)字符(包括0個(gè)),用+表示至少一個(gè)字符,用?表示0個(gè)或1個(gè)字符,用{n}表示n個(gè)字符,用{n,m}表示n-m個(gè)字符:

來(lái)看一個(gè)復(fù)雜的例子:d{3}s+d{3,8}。

我們來(lái)從左到右解讀一下:

d{3}表示匹配3個(gè)數(shù)字,例如"010";

s可以匹配一個(gè)空格(也包括Tab等空白符),所以s+表示至少有一個(gè)空格,例如匹配" ","		"等;

d{3,8}表示3-8個(gè)數(shù)字,例如"1234567"

進(jìn)階

要做更精確地匹配,可以用[]表示范圍,比如:

[0-9a-zA-Z\_]可以匹配一個(gè)數(shù)字、字母或者下劃線;

[0-9a-zA-Z\_]+可以匹配至少由一個(gè)數(shù)字、字母或者下劃線組成的字符串,比如"a100","0_Z","js2015"等等;

[a-zA-Z\_$][0-9a-zA-Z\_$]*可以匹配由字母或下劃線、$開頭,后接任意個(gè)由一個(gè)數(shù)字、字母或者下劃線、$組成的字符串,也就是JavaScript允許的變量名;

[a-zA-Z\_$][0-9a-zA-Z\_$]{0, 19}更精確地限制了變量的長(zhǎng)度是1-20個(gè)字符(前面1個(gè)字符+后面最多19個(gè)字符)。

A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配"JavaScript"、"Javascript"、"javaScript"或者"javascript"。

^表示行的開頭,^d表示必須以數(shù)字開頭。

$表示行的結(jié)束,d$表示必須以數(shù)字結(jié)束。

你可能注意到了,js也可以匹配"jsp",但是加上^js$就變成了整行匹配,就只能匹配"js"了。

先看看如何判斷正則表達(dá)式是否匹配:

var re = /^d{3}-d{3,8}$/;
re.test("010-12345"); // true
re.test("010-1234x"); // false
re.test("010 12345"); // false

切分字符串

用正則表達(dá)式切分字符串比用固定的字符更靈活,請(qǐng)看正常的切分代碼:

"a b   c".split(" "); // ["a", "b", "", "", "c"]

無(wú)法識(shí)別連續(xù)的空格,用正則表達(dá)式試試:

"a b   c".split(/s+/); // ["a", "b", "c"]

無(wú)論多少個(gè)空格都可以正常分割。加入,試試:

"a,b, c  d".split(/[s,]+/); // ["a", "b", "c", "d"]

再加入;試試

"a,b;; c  d".split(/[s,;]+/); // ["a", "b", "c", "d"]

分組

用()表示的就是要提取的分組(Group)。比如:

^(d{3})-(d{3,8})$ 分別定義了兩個(gè)組,可以直接從匹配的字符串中提取出區(qū)號(hào)和本地號(hào)碼:

var re = /^(d{3})-(d{3,8})$/;
re.exec("010-12345"); // ["010-12345", "010", "12345"]
re.exec("010 12345"); // null

如果正則表達(dá)式中定義了組,就可以在RegExp對(duì)象上用exec()方法提取出子串來(lái)

exec()方法在匹配成功后,會(huì)返回一個(gè)Array,第一個(gè)元素是正則表達(dá)式匹配到的整個(gè)字符串,后面的字符串表示匹配成功的子串。

exec()方法在匹配失敗時(shí)返回null。
提取子串非常有用。來(lái)看一個(gè)更兇殘的例子:

var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
re.exec("19:05:30"); // ["19:05:30", "19", "05", "30"]

貪婪匹配
需要特別指出的是,正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符。舉例如下,匹配出數(shù)字后面的0

var re = /^(d+)(0*)$/;
re.exec("102300"); // ["102300", "102300", ""]

由于d+采用貪婪匹配,直接把后面的0全部匹配了,結(jié)果0*只能匹配空字符串了。

必須讓d+采用非貪婪匹配(也就是盡可能少匹配),才能把后面的0匹配出來(lái),加個(gè)?就可以讓d+采用非貪婪匹配:

var re = /^(d+?)(0*)$/;
re.exec("102300"); // ["102300", "1023", "00"]

全局匹配可以多次執(zhí)行exec()方法來(lái)搜索一個(gè)匹配的字符串。當(dāng)我們指定g標(biāo)志后,每次運(yùn)行exec(),正則表達(dá)式本身會(huì)更新lastIndex屬性,表示上次匹配到的最后索引:

var s = "JavaScript, VBScript, JScript and ECMAScript";
var re=/[a-zA-Z]+Script/g;

// 使用全局匹配:
re.exec(s); // ["JavaScript"]
re.lastIndex; // 10

re.exec(s); // ["VBScript"]
re.lastIndex; // 20

re.exec(s); // ["JScript"]
re.lastIndex; // 29

re.exec(s); // ["ECMAScript"]
re.lastIndex; // 44

re.exec(s); // null,直到結(jié)束仍沒(méi)有匹配到

全局匹配類似搜索,因此不能使用/^...$/,那樣只會(huì)最多匹配一次。

正則表達(dá)式還可以指定i標(biāo)志,表示忽略大小寫,m標(biāo)志,表示執(zhí)行多行匹配。

轉(zhuǎn)發(fā)自廖雪峰老師的博客:https://www.liaoxuefeng.com/w...

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

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

相關(guān)文章

  • 正則達(dá)式

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

    bang590 評(píng)論0 收藏0
  • JS中的正則達(dá)式

    摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...

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

    摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語(yǔ)法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡(jiǎn)潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...

    big_cat 評(píng)論0 收藏0
  • 正則與JS中的正則

    摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...

    firim 評(píng)論0 收藏0
  • JavaScript正則達(dá)式的匹配模式

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

    wqj97 評(píng)論0 收藏0
  • 正則達(dá)式

    摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語(yǔ)法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問(wèn)題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<