正則

什么是正則?
正則表達式(regular expression)是一個描述字符規(guī)則的對象神汹±可以用來檢查一個字符串是否含有某個字符丰榴,將匹配的字符做替換或者從某個字符串中取出某個條件的子串等。

unicode編碼中文監(jiān)測:/^[\u2E80-\u9FFF]+$/

正則表達式: 字符串按照某種規(guī)則進行匹配
優(yōu)點: 可以極大的簡化驗證字符串,和修改字符串
每一個語言都有正則表達式, 但是每個語言的正則表達式都有區(qū)別

正則的創(chuàng)建方式:

1.構造函數方式

    var reg1 = new RegExp("a");

    var str = "adassdfsd";

    console.log(str.match(reg1))        //輸出匹配a的字符

2.字面量方式他宛,古老的perl語言風格

    var reg2 = /a/;

    console.log(str2.match(reg2));      //輸出匹配a的字符

正則表達式組成部分

  • 修飾符

    • g 全局匹配
    • i 字母不區(qū)分大小寫
    • m 區(qū)分多行
  • 元字符

.匹配除了(\n)換行符以外的任意字符
\ 轉義符
\d 0-9的數字
\D 非數字
\w 字母船侧, 數字, _
\s 匹配空字符
\b 匹配邊緣

^ 開始符號(在[]里表示非)
$ 結束符號

  • 量詞元字符

* 0次或者多次
+ 至少一次
? 0次或者1次
{m} m次
{m, n} m次到n次
{m,} 至少m次
[abc] a、b厅各、c的其中一個
-> [a-z]
-> [a-zA-Z0-9]
a|b a或者b選一個

() 分組

正則表達式的兩個方法

  1. test() 檢測字符串是否符合正則表達式的規(guī)則镜撩, 如果符合返回true,不符合返回false
  2. exec() 字符串捕獲, 通過正則表達式,獲取字符串的內容

懶惰性: 找到一個滿足的條件队塘,后面不在繼續(xù)經行尋找
貪婪性: 把一次滿足條件的結果一下返回

var reg = /\d+/;
        var str = '2018/06/20';
        console.dir(reg)
        var arr = reg.exec(str);
        // reg.lastIndex = 0;
        console.log(arr);
        arr = reg.exec(str);
        console.log(arr);
        console.dir(reg)
        arr = reg.exec(str);
        console.log(arr);
        console.dir(reg)

        arr = reg.exec(str);
        console.log(arr);
        console.dir(reg)

        arr = reg.exec(str);
        console.log(arr);

        // lastindex: 開次的位置袁梗, 每次查詢完畢后, 記錄這一次最后的位置憔古。
        // 當捕獲的內容為null時遮怜, lastindex會重置。
        // 注意://g 不是捕獲不到結果,就證明字符串是錯的. 因為正常捕獲的話, 總有一次會得到null

        // 字符串中的應用.
        var str = '我TmD真棒鸿市, 我TmD真棒,我TmD真棒';
        console.log(str.replace(/TmD/g, '****'));
        // replace()
        // search() 功能跟indexOf一樣, 只不過可以支持正則表達式
        var str = '我TmD真棒锯梁, 我TmD真棒,我TmD真棒';
        str.search('T');
        // match() //從字符串中匹配內容
        // 正則表達式不添加g修飾符": 和exec 一模一樣
        // 添加修飾符g: 返回所有的匹配結果

        // var str = '今天是2019年, 1月14日';
        // var arr = str.match(/\d+/g);
        var dateStr = '2018/05/27 8:24:36';
        var dateArr = dateStr.match(/\d+/g);
        var date = ['年', '月', '日', '時', '分', '秒'];
        var str = '';
        //[] "2018", "05", "27", "8", "24", "36"]
        dateArr.forEach(function(x, index) {
            str += x + date[index];
        })
        console.log(str);

表達式全集

字符 描述
\ 將下一個字符標記為一個特殊字符、或一個原義字符焰情、或一個向后引用陌凳、或一個八進制轉義符。例如内舟,“n”匹配字符“n”合敦。“\n”匹配一個換行符验游。串行“\”匹配“\”而“(”則匹配“(”充岛。
^ 匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性批狱,^也匹配“\n”或“\r”之后的位置裸准。
$ 匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性赔硫,$也匹配“\n”或“\r”之前的位置炒俱。
* 匹配前面的子表達式零次或多次。例如爪膊,zo能匹配“z”以及“zoo”权悟。等價于{0,}。
+ 匹配前面的子表達式一次或多次推盛。例如峦阁,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”耘成。+等價于{1,}榔昔。
? 匹配前面的子表達式零次或一次驹闰。例如,“do(es)?”可以匹配“does”或“does”中的“do”撒会。?等價于{0,1}嘹朗。
{n} n是一個非負整數。匹配確定的n次诵肛。例如屹培,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o怔檩。
{n,} n是一個非負整數褪秀。至少匹配n次。例如薛训,“o{2,}”不能匹配“Bob”中的“o”媒吗,但能匹配“foooood”中的所有o⌒肀停“o{1,}”等價于“o+”蝴猪。“o{0,}”則等價于“o*”膊爪。
{n,m} m和n均為非負整數自阱,其中n<=m。最少匹配n次且最多匹配m次米酬。例如沛豌,“o{1,3}”將匹配“fooooood”中的前三個o≡叨睿“o{0,1}”等價于“o?”加派。請注意在逗號和兩個數之間不能有空格。
? /^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/ 當該字符緊跟在任何一個其他限制符(*,+,?跳芳,{n}芍锦,{n,},{n,m})后面時飞盆,匹配模式是非貪婪的娄琉。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串吓歇。例如孽水,對于字符串“oooo”,“o+?”將匹配單個“o”城看,而“o+”將匹配所有“o”女气。
. 匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任何字符测柠,請使用像“(.|\n)”的模式炼鞠。
(pattern) 匹配pattern并獲取這一匹配缘滥。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用0…9屬性。要匹配圓括號字符栏渺,請使用“(”或“)”怔接。
(?:pattern) 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配凹耙,不進行存儲供以后使用姿现。這在使用或字符“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式肖抱。
(?=pattern) 正向肯定預查备典,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配意述,也就是說提佣,該匹配不需要獲取供以后使用。例如荤崇,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”拌屏,但不能匹配“Windows3.1”中的“Windows”。預查不消耗字符术荤,也就是說倚喂,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索瓣戚,而不是從包含預查的字符之后開始端圈。
(?!pattern) 正向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串子库。這是一個非獲取匹配舱权,也就是說,該匹配不需要獲取供以后使用仑嗅。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”宴倍,但不能匹配“Windows2000”中的“Windows”。預查不消耗字符无畔,也就是說啊楚,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索浑彰,而不是從包含預查的字符之后開始
(?<=pattern) 反向肯定預查恭理,與正向肯定預查類擬,只是方向相反郭变。例如颜价,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”涯保,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern) 反向否定預查周伦,與正向否定預查類擬夕春,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”专挪,但不能匹配“2000Windows”中的“Windows”及志。
x|y 匹配x或y。例如寨腔,“z|food”能匹配“z”或“food”速侈。“(z|f)ood”則匹配“zood”或“food”迫卢。
[xyz] 字符集合倚搬。匹配所包含的任意一個字符。例如乾蛤,“[abc]”可以匹配“plain”中的“a”每界。
[^xyz] 負值字符集合。匹配未包含的任意字符家卖。例如眨层,“[^abc]”可以匹配“plain”中的“p”。
[a-z] 字符范圍篡九。匹配指定范圍內的任意字符谐岁。例如,“[a-z]”可以匹配“a”到“z”范圍內的任意小寫字母字符榛臼。
[^a-z] 負值字符范圍伊佃。匹配任何不在指定范圍內的任意字符。例如沛善,“[^a-z]”可以匹配任何不在“a”到“z”范圍內的任意字符航揉。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置金刁。例如帅涂,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”尤蛮。
\B 匹配非單詞邊界媳友。“er\B”能匹配“verb”中的“er”产捞,但不能匹配“never”中的“er”醇锚。
\cx 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符焊唬。x的值必須為A-Z或a-z之一恋昼。否則,將c視為一個原義的“c”字符赶促。
\d 匹配一個數字字符液肌。等價于[0-9]。
\D 匹配一個非數字字符鸥滨。等價于[^0-9]嗦哆。
\f 匹配一個換頁符。等價于\x0c和\cL爵赵。
\n 匹配一個換行符吝秕。等價于\x0a和\cJ。
\r 匹配一個回車符空幻。等價于\x0d和\cM。
\s 匹配任何空白字符容客,包括空格秕铛、制表符、換頁符等等缩挑。等價于[ \f\n\r\t\v]但两。
\S 匹配任何非空白字符。等價于[^ \f\n\r\t\v]供置。
\t 匹配一個制表符谨湘。等價于\x09和\cI。
\v 匹配一個垂直制表符芥丧。等價于\x0b和\cK紧阔。
\w 匹配包括下劃線的任何單詞字符。等價于“[A-Za-z0-9_]”续担。
\W 匹配任何非單詞字符擅耽。等價于“[^A-Za-z0-9_]”。
\xn 匹配n物遇,其中n為十六進制轉義值乖仇。十六進制轉義值必須為確定的兩個數字長。例如询兴,“\x41”匹配“A”乃沙。“\x041”則等價于“\x04&1”诗舰。正則表達式中可以使用ASCII編碼警儒。.
\num 匹配num,其中num是一個正整數始衅。對所獲取的匹配的引用冷蚂。例如缭保,“(.)\1”匹配兩個連續(xù)的相同字符。
\n 標識一個八進制轉義值或一個向后引用蝙茶。如果\n之前至少n個獲取的子表達式艺骂,則n為向后引用。否則隆夯,如果n為八進制數字(0-7)钳恕,則n為一個八進制轉義值。
\nm 標識一個八進制轉義值或一個向后引用蹄衷。如果\nm之前至少有nm個獲得子表達式忧额,則nm為向后引用。如果\nm之前至少有n個獲取愧口,則n為一個后跟文字m的向后引用睦番。如果前面的條件都不滿足,若n和m均為八進制數字(0-7)耍属,則\nm將匹配八進制轉義值nm托嚣。
\nml 如果n為八進制數字(0-3),且m和l均為八進制數字(0-7)厚骗,則匹配八進制轉義值nml示启。
\un 匹配n,其中n是一個用四個十六進制數字表示的Unicode字符领舰。例如夫嗓,\u00A9匹配版權符號(?)。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末冲秽,一起剝皮案震驚了整個濱河市舍咖,隨后出現的幾起案子,更是在濱河造成了極大的恐慌劳跃,老刑警劉巖谎仲,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異刨仑,居然都是意外死亡郑诺,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門杉武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辙诞,“玉大人,你說我怎么就攤上這事轻抱》赏浚” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長较店。 經常有香客問我士八,道長,這世上最難降的妖魔是什么梁呈? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任婚度,我火速辦了婚禮,結果婚禮上官卡,老公的妹妹穿的比我還像新娘蝗茁。我一直安慰自己,他們只是感情好寻咒,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布哮翘。 她就那樣靜靜地躺著,像睡著了一般毛秘。 火紅的嫁衣襯著肌膚如雪饭寺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天叫挟,我揣著相機與錄音佩研,去河邊找鬼。 笑死霞揉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的晰骑。 我是一名探鬼主播适秩,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硕舆!你這毒婦竟也來了秽荞?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抚官,失蹤者是張志新(化名)和其女友劉穎扬跋,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體凌节,經...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡钦听,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了倍奢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朴上。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卒煞,靈堂內的尸體忽然破棺而出痪宰,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布衣撬,位于F島的核電站乖订,受9級特大地震影響,放射性物質發(fā)生泄漏具练。R本人自食惡果不足惜乍构,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望靠粪。 院中可真熱鬧蜡吧,春花似錦、人聲如沸占键。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畔乙。三九已至君仆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牲距,已是汗流浹背返咱。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牍鞠,地道東北人咖摹。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像难述,于是被迫代替她去往敵國和親萤晴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容

  • Python中的正則表達式(re) import rere.match #從開始位置開始匹配胁后,如果開頭沒有則無re...
    BigJeffWang閱讀 7,087評論 0 99
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,591評論 0 23
  • 正則表達式到底是什么東西店读?字符是計算機軟件處理文字時最基本的單位,可能是字母攀芯,數字屯断,標點符號,空格侣诺,換行符殖演,漢字等...
    獅子挽歌閱讀 2,150評論 0 9
  • http://www.jb51.net/tools/zhengze.html 正則表達式30分鐘入門教程 版本:v...
    nullleaf閱讀 600評論 0 2
  • 2018.6.9 星期六 陰 今天周六,大寶今天有點感冒紧武,咳嗽發(fā)低燒剃氧,我一早就出去買藥了幸好回春大藥房開始...
    秋天的雨88閱讀 309評論 3 1