[JavaScript] (Day-14) - RegExp 正則表達(dá)式

Happiness is when the desolated soul meets love. 幸福是孤寂的靈魂遭遇愛的邂逅。

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern)白群,可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等书释。

它不限于任何語言

正則表達(dá)式-百度百科


下面對正則進(jìn)簡要介紹:

方括號

方括號([])用于正則表達(dá)式的上下文中時有特殊意義贝攒,用來查找一系列字符

表達(dá) 描述
[...] 查找方括號之間的任何字符
[^...] 查找任何不在方括號之間的字符
[0-9] 查找任何從 0 至 9 的數(shù)字
[a-z] 查找任何小寫 a 到小寫 z 的字符
[A-Z] 查找任何大寫 A 到大寫 Z 的字符
[a-Z] 查找任何小寫 a 到大寫 Z 的字符

解讀:

  • [0-9a-zA-Z\_]可以匹配一個數(shù)字、字母或者下劃線烹笔;
  • [0-9a-zA-Z\_]+可以匹配至少由一個數(shù)字、字母或者下劃線組成的字符串抛丽,比如'a100'谤职,'0_Z''js2015'等等亿鲜;
  • [a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下劃線允蜈、$開頭,后接任意個由一個數(shù)字蒿柳、字母或者下劃線饶套、$組成的字符串
  • [a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精確地限制了變量的長度是1-20個字符(前面1個字符+后面最多19個字符)。

量詞

方括號括起來的字符序列或單個字符出現(xiàn)的頻率或位置可以用一個特殊的符號來表示垒探。每個特殊字符都有一個特定的含義妓蛮。+、*圾叼、? 和 $ 符號都遵循一個字符序列模式

表達(dá) 描述
p+ 匹配任何包含至少一個 p 的字符串
p* 匹配任何包含零個或多個 p 的字符串
p? 匹配任何包含零個或一個 p 的字符串
p{N} 匹配包含 N 個 p 的序列字符串
p{2,3} 匹配包含 2 或 3 個 p 的序列的字符串
p{2,} 匹配包含至少 2 個 p 的序列的字符串
p$ 匹配任何結(jié)尾為 p 的字符串
^p 匹配任何開頭為 p 的字符串

元字符

字符 描述
. 單個字符
\s 空白字符(空格蛤克、制表符、換行符)
\S 非空白字符
\d 數(shù)字字符(0-9)
\D 非數(shù)字字符
\w 單詞字符(a-z,A-Z,0-9,_)
\W 非單詞字符
[\b] 一個文字退格(特殊情況)
[aeiou] 匹配一個在給定集合內(nèi)的字符
[^aeiou] 匹配一個不在給定集合內(nèi)的字符
[foo|bar|baz] 匹配任何指定的備選方案

解讀:

  • '00\d'可以匹配'007'夷蚊,但無法匹配'00A'构挤;
  • '\d\d\d'可以匹配'010'
  • '\w\w'可以匹配'js'惕鼓;
  • 'js.'可以匹配'jsp'筋现、'jss''js!'等等箱歧。

解讀\d{3}\-\d{3,8}表達(dá)式
1矾飞、\d{3} 表示匹配三個數(shù)字,例如123, 010
2呀邢、\- 表示匹配特殊字符-
3洒沦、\d{3,8}表示3到8個數(shù)字,例如 1234567

綜上所述:可以匹配 010-88888888, 021-12345678


RegExp方法

方法 描述
exec() 檢索字符串中指定的值。返回找到的值驼鹅,并確定其位置
test() 檢索字符串中指定的值微谓。返回 ture 或 false
toSource 返回一個對象字面值代表指定的對象;您可以使用這個值來創(chuàng)建一個新的對象。
toString() 返回一個代表指定對象的字符串输钩。

JavaScript 中正則表達(dá)式的使用

RegExp() 構(gòu)造函數(shù)定義

方式一

var pattern = new RegExp(pattern, attributes);

方式二

var patter = /pattern/attributes;

pattern:是一個字符串豺型,指定了正則表達(dá)式的模式或其他正則表達(dá)式。
attributes:是一個可選的字符串买乃,包含屬性 "g"姻氨、"i" 和 "m",分別用于指定全局匹配剪验、區(qū)分大小寫的匹配和多行匹配肴焊。

兩種寫法是一樣的

實(shí)例:

var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');

re1; // /ABC\-001/
re2; // /ABC\-001/

如果使用第二種寫法,因?yàn)樽址霓D(zhuǎn)義問題功戚,字符串的兩個\\實(shí)際上是一個\娶眷。
RegExp對象的test()方法用于測試給定的字符串是否符合條件,返回 true 和 false

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


切分字符串

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

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

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

無論多少個空格都可以正常分割啸臀。加入,試試:

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

再加入;試試:

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


分組

用()表示的就是要提取的分組(Group)

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

全局搜索

JavaScript的正則表達(dá)式還有幾個特殊的標(biāo)志届宠,最常用的是g,表示全局匹配:

var r1 = /test/g;
// 等價于:
var r2 = new RegExp('test', 'g');

全局匹配可以多次執(zhí)行exec()方法來搜索一個匹配的字符串乘粒。當(dāng)我們指定g標(biāo)志后豌注,每次運(yùn)行exec(),正則表達(dá)式本身會更新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é)束仍沒有匹配到
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旦棉,隨后出現(xiàn)的幾起案子齿风,更是在濱河造成了極大的恐慌,老刑警劉巖绑洛,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂宾,死亡現(xiàn)場離奇詭異,居然都是意外死亡诊笤,警方通過查閱死者的電腦和手機(jī)系谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讨跟,“玉大人纪他,你說我怎么就攤上這事×澜常” “怎么了茶袒?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凉馆。 經(jīng)常有香客問我薪寓,道長亡资,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任向叉,我火速辦了婚禮锥腻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘母谎。我一直安慰自己瘦黑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布奇唤。 她就那樣靜靜地躺著幸斥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咬扇。 梳的紋絲不亂的頭發(fā)上甲葬,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音懈贺,去河邊找鬼演顾。 笑死,一個胖子當(dāng)著我的面吹牛隅居,可吹牛的內(nèi)容都是我干的钠至。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胎源,長吁一口氣:“原來是場噩夢啊……” “哼棉钧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涕蚤,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宪卿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后万栅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佑钾,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年烦粒,在試婚紗的時候發(fā)現(xiàn)自己被綠了休溶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡扰她,死狀恐怖兽掰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徒役,我是刑警寧澤孽尽,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站忧勿,受9級特大地震影響杉女,放射性物質(zhì)發(fā)生泄漏瞻讽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一熏挎、第九天 我趴在偏房一處隱蔽的房頂上張望速勇。 院中可真熱鬧,春花似錦婆瓜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乖寒,卻和暖如春猴蹂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楣嘁。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工磅轻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逐虚。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓聋溜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叭爱。 傳聞我的和親對象是個殘疾皇子撮躁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 初衷:看了很多視頻、文章买雾,最后卻通通忘記了把曼,別人的知識依舊是別人的,自己卻什么都沒獲得漓穿。此系列文章旨在加深自己的印...
    DCbryant閱讀 3,982評論 0 20
  • 正則表達(dá)式到底是什么東西嗤军?字符是計(jì)算機(jī)軟件處理文字時最基本的單位,可能是字母晃危,數(shù)字叙赚,標(biāo)點(diǎn)符號,空格僚饭,換行符纠俭,漢字等...
    獅子挽歌閱讀 2,136評論 0 9
  • 推薦幾個正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,468評論 9 151
  • 幾個正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
  • 正則表達(dá)式 \n\n\n 【5】正則表達(dá)式應(yīng)用——刪除空行 啟動EditPlus,打開待處理的文本類型文件浪慌。 ①冤荆、...
    黃花菜已涼閱讀 1,021評論 0 4