面試中會遇到的正則題

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

一、var s1 = "get-element-by-id"; 給定這樣一個連字符串,寫一個function轉換爲駝峯命名法形式的字符串 getElementByIdgit

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

二、判斷字符串是否包含數字github

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

三、判斷電話號碼正則表達式

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

四、判斷是否符合指定格式數組

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

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

五、判斷是否符合USD格式url

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

  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);
}

六、JS實現千位分隔符orm

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

七、獲取 url 參數對象

獲取 url 中的參數blog

  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 '';
    }
}

八、驗證郵箱

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

九、驗證身份證號碼

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

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

十、匹配漢字

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

十一、去除首尾的'/'

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

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

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

1三、判斷日期格式是否符合 '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)$/;

1四、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]?)$/;

1五、十六進制顏色正則

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

1六、車牌號正則

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

1七、過濾HTML標籤

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

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

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

1九、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)$/;

2一、<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中的知識,^_^

相關文章
相關標籤/搜索