正則表達(dá)式筆記

正則詳細(xì)文章 代碼之美卵贱,正則之道

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

1. 使用一個(gè)正則表達(dá)式字面量

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

2. 調(diào)用RegExp對(duì)象的構(gòu)造函數(shù)

const regex = new RegExp(pattern, [, flags])

特殊字符

^ 匹配輸入的開始
$ 匹配輸入的結(jié)束
* 0次或多次 {0鼻弧,}
+ 1次或多次 {1锣杂,}
?
- 0次或者1次 {0,1}。
-用于先行斷言
-如果緊跟在任何量詞 *洞坑、 +耳高、? 或 {} 的后面,將會(huì)使量詞變?yōu)榉秦澙?/strong>
-對(duì) "123abc" 用 /\d+/ 將會(huì)返回 "123"蕊爵,
-用 /\d+?/,那么就只會(huì)匹配到 "1"。

. 匹配除換行符之外的任何單個(gè)字符
(x) 匹配 'x' 并且記住匹配項(xiàng)
(?:x) 匹配 'x' 但是不記住匹配項(xiàng)
x(?=y) 配'x'僅僅當(dāng)'x'后面跟著'y'.這種叫做正向肯定查找桦山。
x(?!y) 匹配'x'僅僅當(dāng)'x'后面不跟著'y',這個(gè)叫做正向否定查找攒射。
x|y 匹配‘x’或者‘y’。
{n} 重復(fù)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 表示第三個(gè)分組
\b 詞的邊界
/\bm/匹配“moon”中得‘m’
\B 非單詞邊界

使用正則表達(dá)式的方法

  • exec 一個(gè)在字符串中執(zhí)行查找匹配的RegExp方法矢沿,它返回一個(gè)數(shù)組(未匹配到則返回null)。
  • test 一個(gè)在字符串中測(cè)試是否匹配的RegExp方法饮笛,它返回true或false咨察。
  • match 一個(gè)在字符串中執(zhí)行查找匹配的String方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回null福青。
  • search 一個(gè)在字符串中測(cè)試匹配的String方法摄狱,它返回匹配到的位置索引脓诡,或者在失敗時(shí)返回-1。
  • replace 一個(gè)在字符串中執(zhí)行查找匹配的String方法媒役,并且使用替換字符串替換掉匹配到的子字符串祝谚。
  • split 一個(gè)使用正則表達(dá)式或者一個(gè)固定字符串分隔一個(gè)字符串,并將分隔后的子字符串存儲(chǔ)到數(shù)組中的String方法酣衷。

練習(xí)

1交惯、匹配結(jié)尾的數(shù)字

/\d+$/g

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

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

3啊片、判斷字符串是不是由數(shù)字組成

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

4只锻、電話號(hào)碼正則
區(qū)號(hào)必填為3-4位的數(shù)字
區(qū)號(hào)之后用“-”與電話號(hào)碼連接電話號(hào)碼為7-8位的數(shù)字
分機(jī)號(hào)碼為3-4位的數(shù)字,非必填紫谷,但若填寫則以“-”與電話號(hào)碼相連接

/^\d{3,4}-\d{7,8}(-\d{3,4})?$/

5齐饮、手機(jī)號(hào)碼正則表達(dá)式
正則驗(yàn)證手機(jī)號(hào),忽略前面的0笤昨,支持130-139祖驱,150-159熙暴。忽略前面0之后判斷它是11位的啡捶。

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

6、使用正則表達(dá)式實(shí)現(xiàn)刪除字符串中的空格

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

7拇舀、限制文本框只能輸入數(shù)字和兩位小數(shù)點(diǎn)等等

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

8根竿、只能輸入小寫的英文字母和小數(shù)點(diǎn)陵像,和冒號(hào),正反斜杠(:./)

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

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

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

10、只匹配中文的正則表達(dá)式

/[\u4E00-\u9FA5\uf900-\ufa2d]/ig

返回字符串的中文字符個(gè)數(shù)
先去掉非中文字符妻怎,再返回length屬性壳炎。

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

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

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

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

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

13匿辩、用正則表達(dá)式獲得文件名

c:\images\tupian\006.jpg

可能是直接在盤符根目錄下,也可能在好幾層目錄下榛丢,要求替換到只剩文件名铲球。
首先匹配非左右斜線字符0或多個(gè),然后是左右斜線一個(gè)或者多個(gè)晰赞。

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

14稼病、絕對(duì)路徑變相對(duì)路徑
"http://23.123.22.12/image/somepic.gif"轉(zhuǎn)換為:"/image/somepic.gif"

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

15选侨、用戶名正則
用于用戶名注冊(cè),然走,用戶名只 能用 中文援制、英文、數(shù)字芍瑞、下劃線晨仑、4-16個(gè)字符。

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

16拆檬、匹配英文地址
規(guī)則如下:
包含 "點(diǎn)", "字母","空格","逗號(hào)","數(shù)字"洪己,但開頭和結(jié)尾不能是除字母外任何字符。

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

17竟贯、正則匹配價(jià)格
開頭數(shù)字若干位答捕,可能有一個(gè)小數(shù)點(diǎn),小數(shù)點(diǎn)后面可以有兩位數(shù)字澄耍。

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

18噪珊、身份證號(hào)碼的匹配
身份證號(hào)碼可以是15位或者是18位,其中最后一位可以是X齐莲。其它全是數(shù)字

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

19痢站、單詞首字母大寫
每單詞首字大寫,其他小寫选酗。如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());
}

20、正則驗(yàn)證日期格式
yyyy-mm-dd格式
4位數(shù)字芒填,橫線呜叫,1或者2位數(shù)字,再橫線殿衰,最后又是1或者2位數(shù)字朱庆。

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

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

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

22闷祥、驗(yàn)證郵箱的正則表達(dá)式
開始必須是一個(gè)或者多個(gè)單詞字符或者是-娱颊,加上@,然后又是一個(gè)或者多個(gè)單詞字符或者是-凯砍。然后是點(diǎn)“.”和單詞字符和-的組合箱硕,可以有一個(gè)或者多個(gè)組合。

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

23悟衩、正則判斷標(biāo)簽是否閉合
例如:<img xxx=”xxx” 就是沒有閉合的標(biāo)簽剧罩;
<p>p的內(nèi)容,同樣也是沒閉合的標(biāo)簽座泳。
標(biāo)簽可能有兩種方式閉合惠昔,<img xxx=”xxx” /> 或者是<p> xxx </p>幕与。

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

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

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

25纽门、將阿拉伯?dāng)?shù)字替換為中文大寫形式

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

26、去掉標(biāo)簽的所有屬性
<td style="width: 23px; height: 26px;" align="left"></td>
變成沒有任何屬性的
<td></td>
思路:非捕獲匹配屬性营罢,捕獲匹配標(biāo)簽赏陵,使用捕獲結(jié)果替換掉字符串。正則如下:

/(<td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(>)/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饲漾,一起剝皮案震驚了整個(gè)濱河市蝙搔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考传,老刑警劉巖吃型,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異僚楞,居然都是意外死亡勤晚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門泉褐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赐写,“玉大人,你說我怎么就攤上這事膜赃⊥ρ” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵跳座,是天一觀的道長(zhǎng)端铛。 經(jīng)常有香客問我,道長(zhǎng)疲眷,這世上最難降的妖魔是什么禾蚕? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狂丝,結(jié)果婚禮上夕膀,老公的妹妹穿的比我還像新娘。我一直安慰自己美侦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布魂奥。 她就那樣靜靜地躺著菠剩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耻煤。 梳的紋絲不亂的頭發(fā)上具壮,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天准颓,我揣著相機(jī)與錄音,去河邊找鬼棺妓。 笑死攘已,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怜跑。 我是一名探鬼主播样勃,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼性芬!你這毒婦竟也來了峡眶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤植锉,失蹤者是張志新(化名)和其女友劉穎辫樱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俊庇,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狮暑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辉饱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搬男。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鞋囊,靈堂內(nèi)的尸體忽然破棺而出止后,到底是詐尸還是另有隱情,我是刑警寧澤溜腐,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布译株,位于F島的核電站,受9級(jí)特大地震影響挺益,放射性物質(zhì)發(fā)生泄漏歉糜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一望众、第九天 我趴在偏房一處隱蔽的房頂上張望匪补。 院中可真熱鬧,春花似錦烂翰、人聲如沸夯缺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踊兜。三九已至,卻和暖如春佳恬,著一層夾襖步出監(jiān)牢的瞬間捏境,已是汗流浹背于游。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垫言,地道東北人贰剥。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像筷频,于是被迫代替她去往敵國(guó)和親蚌成。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配截驮,如果開頭沒有則無re...
    BigJeffWang閱讀 7,056評(píng)論 0 99
  • python re模塊重要函數(shù)變量:1. compile() 根據(jù)正則表達(dá)式字符串笑陈,創(chuàng)建模式的對(duì)象。2. sear...
    野狗子嗷嗷嗷閱讀 298評(píng)論 0 1
  • 正則表達(dá)式葵袭,又稱規(guī)則表達(dá)式涵妥,是一種文本模式,通常用來檢索坡锡、替換和控制文本蓬网。在計(jì)算機(jī)科學(xué)中,是指一個(gè)用來描述或者匹配...
    神齊閱讀 308評(píng)論 0 1
  • 正則表達(dá)式一般用于檢索鹉勒,替換文本帆锋。 一.正則表達(dá)式元字符和語法: 這些語法是每種語言都通用的。接下來記一下pyth...
    omuraisu閱讀 644評(píng)論 0 2
  • 正則表達(dá)式是一種強(qiáng)大的字符串處理工具,平時(shí)經(jīng)常會(huì)用到禽额。這里完整的做一次總結(jié)锯厢,以便查閱記憶。 1. 字符串中的正則表...
    超低空閱讀 8,296評(píng)論 2 31