面試中會遇到的正則題

呆頭呆腦丶發表於2018-04-02

正規表示式,有木有人像我一樣,學了不知道多少遍,學的時候看起來都懂了,過一段時間就又忘的差不多了,等真正要用到的時候,還是一臉懵逼。說到底還是練習的不夠多,一直處於只看不做的程度上。所以蒐集了這些正則習題,來保證溫故而知新。建議讀者看完題目後可以自己先做一做,然後再看實現方法。本文不講基礎,只記錄習題,如果後續有新的題目,也會保持更新。

1、var s1 = “get-element-by-id”; 給定這樣一個連字串,寫一個function轉換為駝峰命名法形式的字串 getElementById

var f = function(s) {
    return s.replace(/-w/g, function(x) {
        return x.slice(1).toUpperCase();
    })
}

2、判斷字串是否包含數字

function containsNumber(str) {
    var regx = /d/;
    return regx.text(str);
}

3、判斷電話號碼

function isPhone(tel) {
    var regx = /^1[34578]d{9}$/;
    return regx.test(tel);
}

4、判斷是否符合指定格式

給定字串str,檢查其是否符合如下格式

  1. XXX-XXX-XXXX
  2. 其中X為Number型別
function matchesPattern(str) {
    return /^(d{3}-){2}d{4}&/.test(str);
}

5、判斷是否符合USD格式

給定字串 str,檢查其是否符合美元書寫格式

  1. 以 $ 開始
  2. 整數部分,從個位起,滿 3 個數字用 , 分隔
  3. 如果為小數,則小數部分長度為 2
  4. 正確的格式如:$1,023,032.03 或者 $2.03,錯誤的格式如:$3,432,12.12 或者 $34,344.3**
function isUSD(str) {
    var regx = /^$d{1,3}(,d{3})*(.d{2})?$/;
    return regx.test(str);
}

6、JS實現千位分隔符

function format(number) {
    var regx = /d{1,3}(?=(d{3})+$)/g;
    return (number + ``).replace(regx, `$&,`)  // $&表示與regx相匹配的字串
}

7、獲取 url 引數

獲取 url 中的引數

  1. 指定引數名稱,返回該引數的值 或者 空字串
  2. 不指定引數名稱,返回全部的引數物件 或者 {}
  3. 如果存在多個同名引數,則返回陣列
function getUrlParam(url, key) {
    var arr = {};
    url.replace(/??(w+)=(w+)&?/g, function(match, matchKey, matchValue) {
       if (!arr[matchKey]) {
           arr[matchKey] = matchValue;
       } else {
           var temp = arr[matchKey];
           arr[matchKey] = [].concat(temp, matchValue);
       }
    });
    if (!key) {
        return arr;
    } else {
        for (ele in arr) {
            if (ele = key) {
                return arr[ele];
            }
        }
        return ``;
    }
}

8、驗證郵箱

function isEmail(email) {
    var regx = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+$/;
    return regx.test(email);
}

9、驗證身份證號碼

身份證號碼可能為15位或18位,15位為全數字,18位中前17位為數字,最後一位為數字或者X

function isCardNo(number) {
    var regx = /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/;
    return regx.test(number);
}

10、匹配漢字

var regx = /^[u4e00-u9fa5]{0,}$/;

11、去除首尾的`/`

var str = `/asdf//`;
str = str.replace(/^/*|/*$/g, ``);

12、判斷日期格式是否符合 `2017-05-11`的形式,簡單判斷,只判斷格式

var regx = /^d{4}-d{1,2}-d{1,2}$/

13、判斷日期格式是否符合 `2017-05-11`的形式,嚴格判斷(比較複雜)

var regx = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;

14、IPv4地址正則

var regx = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;

15、十六進位制顏色正則

var regx = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;

16、車牌號正則

var regx = /^[京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊使領A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9掛學警港澳]{1}$/;

17、過濾HTML標籤

var str="<p>dasdsa</p>nice <br> test</br>"
var regx = /<[^<>]+>/g;
str = str.replace(regx, ``);

18、密碼強度正則,最少6位,包括至少1個大寫字母,1個小寫字母,1個數字,1個特殊字元

var regx = /^.*(?=.{6,})(?=.*d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

19、URL正則

var regx = /^((https?|ftp|file)://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/;

20、匹配浮點數

var regx = /^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$/;

21、<OPTION value=”待處理”>待處理</OPTION>

寫一個正規表示式,匹配 “<OPTION value=”待處理”>”

var str = `<OPTION value="待處理">待處理</OPTION>`;
var regx = /^<.*?>/;
var resiult = regx.exec(str)[0];

最後推薦一個練習正則的網站 regulex%7B2%7D%5Cd%7B4%7D%26),可以檢視正則匹配的走向

如果喜歡請關注我的Github,給個Star吧,我會定期分享一些JS中的知識,^_^

相關文章