正則

正則表達式

創(chuàng)建正則表達式

  1. 使用一個正則表達式字面量
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
  1. 調(diào)用 RegExp 對象的構(gòu)造函數(shù)
const regex = new RegExp(pattern, [, flags]);

特殊字符

  • ^ 匹配輸入的開始
  • $ 匹配輸入的結(jié)束
  • * 0 次或多次 {0,}
  • + 1 次或多次 {1宁脊,}
  • ?
    • 0 次或者 1 次 {0,1}掌实。
    • 用于先行斷言
    • 如果緊跟在任何量詞 *、 +狸棍、? 或 {} 的后面,將會使量詞變?yōu)榉秦澙?
      • 對 "123abc" 用 /\d+/ 將會返回 "123",
      • 用 /\d+?/,那么就只會匹配到 "1"粒蜈。
  • . 匹配除換行符之外的任何單個字符
  • (x) 匹配 'x' 并且記住匹配項
  • (?:x) 匹配 'x' 但是不記住匹配項
  • x(?=y) 配'x'僅僅當'x'后面跟著'y'.這種叫做正向肯定查找。
  • x(?!y) 匹配'x'僅僅當'x'后面不跟著'y',這個叫做正向否定查找术唬。
  • x|y 匹配‘x’或者‘y’薪伏。
  • {n} 重復 n 次
  • {n, m} 匹配至少 n 次,最多 m 次
  • [xyz] 代表 x 或 y 或 z
  • [^xyz] 不是 x 或 y 或 z
  • \d 數(shù)字
  • \D 非數(shù)字
  • \s 空白字符粗仓,包括空格嫁怀、制表符、換頁符和換行符借浊。
  • \S 非空白字符
  • \w 單詞字符(字母塘淑、數(shù)字或者下劃線) [A-Za-z0-9_]
  • \W 非單字字符。[^a-za-z0-9_]
  • \3 表示第三個分組
  • \b 詞的邊界
    • /\bm/匹配“moon”中得‘m’蚂斤;
  • \B 非單詞邊界

使用正則表達式的方法

  • exec 一個在字符串中執(zhí)行查找匹配的 RegExp 方法存捺,它返回一個數(shù)組(未匹配到則返回 null)。
  • test 一個在字符串中測試是否匹配的 RegExp 方法,它返回 true 或 false捌治。
  • match 一個在字符串中執(zhí)行查找匹配的 String 方法岗钩,它返回一個數(shù)組或者在未匹配到時返回 null。
  • search 一個在字符串中測試匹配的 String 方法肖油,它返回匹配到的位置索引兼吓,或者在失敗時返回-1。
  • replace 一個在字符串中執(zhí)行查找匹配的 String 方法森枪,并且使用替換字符串替換掉匹配到的子字符串视搏。
  • split 一個使用正則表達式或者一個固定字符串分隔一個字符串,并將分隔后的子字符串存儲到數(shù)組中的 String 方法县袱。

練習

匹配結(jié)尾的數(shù)字

/\d+$/g;

統(tǒng)一空格個數(shù)
字符串內(nèi)如有空格浑娜,但是空格的數(shù)量可能不一致,通過正則將空格的個數(shù)統(tǒng)一變?yōu)橐粋€式散。

let reg = /\s+/g;
str.replace(reg, " ");

判斷字符串是不是由數(shù)字組成

str.test(/^\d+$/);

電話號碼正則

  • 區(qū)號必填為 3-4 位的數(shù)字
  • 區(qū)號之后用“-”與電話號碼連接電話號碼為 7-8 位的數(shù)字
  • 分機號碼為 3-4 位的數(shù)字筋遭,非必填,但若填寫則以“-”與電話號碼相連接
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/;

手機號碼正則表達式
正則驗證手機號杂数,忽略前面的 0宛畦,支持 130-139,150-159揍移。忽略前面 0 之后判斷它是 11 位的次和。

/^0*1(3|5)\d{9}$/;

使用正則表達式實現(xiàn)刪除字符串中的空格

funtion trim(str) {
  let reg = /^\s+|\s+$/g
  return str.replace(reg, '');
}

限制文本框只能輸入數(shù)字和兩位小數(shù)點等等

/^\d*\.\d{0,2}$/;

只能輸入小寫的英文字母和小數(shù)點,和冒號那伐,正反斜杠(:./)

/^[a-z\.:\/\\]*$/;

替換小數(shù)點前內(nèi)容為指定內(nèi)容
例如:infomarket.php?id=197 替換為 test.php?id=197

var reg = /^[^\.]+/;
var target = "---------";
str = str.replace(reg, target);

只匹配中文的正則表達式

/[\u4E00-\u9FA5\uf900-\ufa2d]/gi;

返回字符串的中文字符個數(shù)
先去掉非中文字符踏施,再返回 length 屬性。

function cLength(str) {
  var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
  //匹配非中文的正則表達式
  var temp = str.replace(reg, "");
  return temp.length;
}

正則表達式取得匹配 IP 地址前三段
只要匹配掉最后一段并且替換為空字符串就行了

function getPreThrstr(str) {
  let reg = /\.\d{1,3}$/;
  return str.replace(reg, "");
}

匹配<ul>與</ul>之間的內(nèi)容

/<ul>[\s\S]+?</ul>/i

用正則表達式獲得文件名
c:\images\tupian\006.jpg
可能是直接在盤符根目錄下,也可能在好幾層目錄下,要求替換到只剩文件名护姆。
首先匹配非左右斜線字符 0 或多個,然后是左右斜線一個或者多個日熬。

function getFileName(str) {
  var reg = /[^\\\/]*[\\\/]+/g;
  // xxx\ 或是 xxx/
  str = str.replace(reg, "");
  return str;
}

絕對路徑變相對路徑
"http://23.123.22.12/image/somepic.gif"轉(zhuǎn)換為:"/image/somepic.gif"

var reg = /http:\/\/[^\/]+/;
str = str.replace(reg, "");

用戶名正則
用于用戶名注冊,肾胯,用戶名只 能用 中文竖席、英文、數(shù)字敬肚、下劃線毕荐、4-16 個字符。

/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;

匹配英文地址
規(guī)則如下:
包含 "點", "字母","空格","逗號","數(shù)字"艳馒,但開頭和結(jié)尾不能是除字母外任何字符憎亚。

/^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/;

正則匹配價格
開頭數(shù)字若干位,可能有一個小數(shù)點,小數(shù)點后面可以有兩位數(shù)字第美。

/^\d+(\.\d{2})?$/;

身份證號碼的匹配
身份證號碼可以是 15 位或者是 18 位蝶锋,其中最后一位可以是 X。其它全是數(shù)字

/^(\d{14}|\d{17})(X|x)$/;

單詞首字母大寫
每單詞首字大寫斋日,其他小寫牲览。如 blue idea 轉(zhuǎn)換為 Blue Idea,BLUE IDEA 也轉(zhuǎn)換為 Blue Idea

function firstCharUpper(str) {
  str = str.toLowerCase();
  let reg = /\b(\w)/g;
  return str.replace(reg, (m) => m.toUpperCase());
}

正則驗證日期格式
yyyy-mm-dd 格式
4 位數(shù)字恶守,橫線,1 或者 2 位數(shù)字贡必,再橫線兔港,最后又是 1 或者 2 位數(shù)字。

/^\d{4}-\d{1,2}-\d{1,2}$/;

去掉文件的后綴名
www.abc.com/dc/fda.asp 變?yōu)?www.abc.com/dc/fda

function removeExp(str) {
  return str.replace(/\.\w$/, "");
}

驗證郵箱的正則表達式
開始必須是一個或者多個單詞字符或者是-仔拟,加上@衫樊,然后又是一個或者多個單詞字符或者是-。然后是點“.”和單詞字符和-的組合利花,可以有一個或者
多個組合科侈。

/^[\w-]+@\w+\.\w+$/;

正則判斷標簽是否閉合
例如:<img xxx=”xxx” 就是沒有閉合的標簽;

<p>p的內(nèi)容炒事,同樣也是沒閉合的標簽臀栈。

標簽可能有兩種方式閉合,<img xxx=”xxx” /> 或者是<p> xxx </p>挠乳。

/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i;

正則判斷是否為數(shù)字與字母的混合
不能小于 12 位权薯,且必須為字母和數(shù)字的混

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;

將阿拉伯數(shù)字替換為中文大寫形式

function replaceReg(reg, str) {
  let arr = ["零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"];
  let reg = /\d/g;
  return str.replace(reg, function (m) {
    return arr[m];
  });
}

去掉標簽的所有屬性

<td style="width: 23px; height: 26px;" align="left"></td>
變成沒有任何屬性的
<td>
</td>
思路:非捕獲匹配屬性,捕獲匹配標簽睡扬,使用捕獲結(jié)果替換掉字符串盟蚣。正則如下:

/(<td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(>)/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卖怜,隨后出現(xiàn)的幾起案子屎开,更是在濱河造成了極大的恐慌,老刑警劉巖马靠,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄抽,死亡現(xiàn)場離奇詭異,居然都是意外死亡虑粥,警方通過查閱死者的電腦和手機如孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娩贷,“玉大人第晰,你說我怎么就攤上這事。” “怎么了茁瘦?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵品抽,是天一觀的道長。 經(jīng)常有香客問我甜熔,道長圆恤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任腔稀,我火速辦了婚禮盆昙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焊虏。我一直安慰自己淡喜,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布诵闭。 她就那樣靜靜地躺著炼团,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疏尿。 梳的紋絲不亂的頭發(fā)上瘟芝,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音褥琐,去河邊找鬼锌俱。 笑死,一個胖子當著我的面吹牛踩衩,可吹牛的內(nèi)容都是我干的嚼鹉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼驱富,長吁一口氣:“原來是場噩夢啊……” “哼锚赤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褐鸥,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤线脚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叫榕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浑侥,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年晰绎,在試婚紗的時候發(fā)現(xiàn)自己被綠了寓落。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡荞下,死狀恐怖伶选,靈堂內(nèi)的尸體忽然破棺而出史飞,到底是詐尸還是另有隱情,我是刑警寧澤仰税,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布构资,位于F島的核電站,受9級特大地震影響陨簇,放射性物質(zhì)發(fā)生泄漏吐绵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一河绽、第九天 我趴在偏房一處隱蔽的房頂上張望己单。 院中可真熱鬧,春花似錦葵姥、人聲如沸荷鼠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矮嫉,卻和暖如春削咆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蠢笋。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工拨齐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昨寞。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓瞻惋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親援岩。 傳聞我的和親對象是個殘疾皇子歼狼,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

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