JS正則表達(dá)式常見用法實(shí)例詳解
本文實(shí)例講述了JS正則表達(dá)式常見用法。分享給大家供大家參考,具體如下:
前言:正則表達(dá)式(regular expression)反反復(fù)復(fù)學(xué)了多次,學(xué)了又忘,忘了又學(xué),這次打算把基本的東西都整理出來,加強(qiáng)記憶,也方便下次查詢。
學(xué)習(xí)正則表達(dá)式之前首先需要掌握記憶這些基本概念:
1.元字符:(.,\w,\W,\d,\D,\s,/S,^,$,)
字符 | 含義 |
---|---|
. | 匹配除了換行符以外的任意字符。 |
\s | 代表任意空白符(換行符,制表符,空格) |
\S | 匹配任意非空字符串 |
\b | 匹配單詞邊界,匹配單詞的開頭和結(jié)尾。 |
\B | 匹配一個非單詞邊界 |
\d | 匹配一個數(shù)字,等價于[0-9] |
\D | 匹配一個數(shù)字,等價于[^0-9] |
\w | 匹配一個單字字符(字母、數(shù)字或者下劃線)等價于[A-Za-z0-9_],例如, /\w/ 匹配 "apple," 中的 'a',"$5.28,"中的 '5' 和 "3D." 中的 '3'。 \W匹配一個非單字字符。等價于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%'。 |
\W | 匹配一個非單字字符。等價于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%'。 |
^ | 匹配字符串的開始用在[]括號里面表示排除,/^A/ 并不會匹配 "an A" 中的 'A',但是會匹配 "An E" 中的 'A'。 |
$ | 匹配字符串的結(jié)束。例如,/t$/ 并不會匹配 "eater" 中的 't',但是會匹配 "eat" 中的 't'。 QQ號必須為5位到12位數(shù)字時,可以使用:^\d{5,12}$ |
我們發(fā)現(xiàn)\W加大寫字母都是表示相反的意思。
2.分組符([],(),{});
字符 | 含義 |
---|---|
() | 如果想要重復(fù)多個字符該怎么辦?你可以用小括號來指定子表達(dá)式(也叫做分組),然后你就可以指定這個子表達(dá)式的重復(fù)次數(shù)了。eg: (\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達(dá)式。要理解這個表達(dá)式,請按下列順序分析它:\d{1,3}匹配1到3位的數(shù)字,(\d{1,3}\.){3}匹配三位數(shù)字加上一個英文句號(這個整體也就是這個分組)重復(fù)3次,最后再加上一個一到三位的數(shù)字(\d{1,3})。 |
[] | 代表一個字符集合。匹配方括號的中任意字符,包括轉(zhuǎn)義序列。你可以使用破折號(-)來指定一個字符范圍。對于點(diǎn)(.)和星號(*)這樣的特殊符號在一個字符集中沒有特殊的意義。他們不必進(jìn)行轉(zhuǎn)義,不過轉(zhuǎn)義也是起作用的。例如,[abcd] 和[a-d]是一樣的。他們都匹配"brisket"中得‘b',也都匹配“city”中的‘c'。/[a-z.]+/ 和/[\w.]+/都匹配“test.i.ng”中得所有字符。 |
{} | 表示量詞的范圍的。 |
3.修飾符(i,g,m);
字符 | 含義 |
---|---|
i | 忽略大小寫 |
g | 執(zhí)行全局匹配 |
m | 執(zhí)行多行匹配 |
4.量詞(*,?,+,-,{n,m},?=n,?!=n);
字符 | 含義 |
---|---|
* | 匹配任意次,.*連在一起就意味著任意數(shù)量的不包含換行的字符。等價于{0,} |
+ | 匹配前面一個表達(dá)式1次或者多次。等價于 {1,}。 |
? | 匹配前面一個表達(dá)式0次或者1次。等價于 {0,1}。 |
{n,m} | 匹配n到m次 |
x(?=y) | 匹配'x'僅僅當(dāng)'x'后面跟著'y'.這種叫做正向肯定查找。 例如,/Jack(?=Sprat)/會匹配到'Jack'僅僅當(dāng)它后面跟著'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack'僅僅當(dāng)它后面跟著'Sprat'或者是‘Frost'。但是‘Sprat'和‘Frost'都不是匹配結(jié)果的一部分。 |
x(?!y) | 匹配'x'僅僅當(dāng)'x'后面不跟著'y',這個叫做正向否定查找。 例如,/\d+(?!\.)/匹配一個數(shù)字僅僅當(dāng)這個數(shù)字后面沒有跟小數(shù)點(diǎn)的時候。正則表達(dá)式/\d+(?!\.)/.exec("3.141")匹配‘141'但是不是‘3.141' |
實(shí)例解析:
var reg = /\(?0\d{2}[) -]?\d{8}/
“(”和“)”也是元字符,后面的分組節(jié)里會提到,所以在這里需要使用轉(zhuǎn)義。
這個表達(dá)式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進(jìn)行一些分析吧:首先是一個轉(zhuǎn)義字符\(,它能出現(xiàn)0次或1次(?),然后是一個0,后面跟著2個數(shù)字(\d{2}),然后是)或-或空格中的一個,它出現(xiàn)1次或不出現(xiàn)(?),最后是8個數(shù)字(\d{8})。
以下通過實(shí)例來講解RegExp:
需求一:在一句話英文中匹配一個hi的單詞。
var str = 'Hi RegExp I love you so much Hi Hi hi'; var reg = new RegExp("\\bhi\\b","gi");//g是一個修飾符,表示全局匹配。\b是一個元字符,代表單詞邊界,匹配單詞的開頭和結(jié)尾。 //直接量語法: reg2 = /\bhi\b/gi; console.log(str.match(reg2));//['hi','hi','hi','hi'] //升級 //匹配hi后面不遠(yuǎn)處跟著一個lucy var strlc = /\bhi\b.*\blucy\b/; var luch = 'hi welcome to beijing lucy!!!'; console.log(luch.match(strlc));
需求二:在一句話英文中匹配一個hi的單詞。
var reg = /0\d\d\d-\d\d\d\d\d\d\d\d/;//\d代表一個數(shù)字,等價于[0-9],\D匹配一個非數(shù)字字符,等價于[^0-9] var tel = "0123-887523146"; console.log(tel.match(reg));//0123-88752314; //這個連續(xù)寫多次的方法很笨哎,所以引進(jìn)了變量。 regTel = /0\d{3}-\d{8}/; console.log(tel.match(regTel));//0123-88752314;
需求三:寫一個清除字符串前后空格的正則表達(dá)式。
String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");} var str2 = " hi space "http://這里前后共有兩個空格 console.log(str2.length);//14 console.log(str2.trim().length);//8 console.log(str2.trim());//hi space
需求四:匹配一個郵箱。
var eReg = /\S*@\S*\.\S*/; console.log(eReg.test('873619879@qq.com'))//true
參考文章:
http://www.dbjr.com.cn/books/513871.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#
//www.dbjr.com.cn/article/72867.htm
http://www.dbjr.com.cn/article/107796.htm
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript正則表達(dá)式技巧大全》、《JavaScript替換操作技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- JS正則表達(dá)式大全(整理詳細(xì)且實(shí)用)
- 比較正宗的驗(yàn)證郵箱的正則表達(dá)式j(luò)s代碼詳解
- javascript 手機(jī)號碼正則表達(dá)式驗(yàn)證函數(shù)
- js 常用正則表達(dá)式表單驗(yàn)證代碼
- JS正則表達(dá)式驗(yàn)證數(shù)字代碼
- JavaScript正則表達(dá)式驗(yàn)證身份證號碼是否合法(兩種方法)
- 精通JS正則表達(dá)式(推薦)
- 用戶名、密碼等15個常用的js正則表達(dá)式
- js各種驗(yàn)證文本框輸入格式(正則表達(dá)式)
- js正則表達(dá)式中test,exec,match方法的區(qū)別說明
- js 替換功能函數(shù),用正則表達(dá)式解決,js的全部替換
相關(guān)文章
JS正則表達(dá)式詳解及身份證號碼驗(yàn)證(簡易版)
在做用戶實(shí)名驗(yàn)證時,常會用到身份證號碼的正則表達(dá)式及校驗(yàn)方案,下面這篇文章主要給大家介紹了關(guān)于JS正則表達(dá)式及身份證號碼驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2022-07-07用JavaScript實(shí)現(xiàn)簡單網(wǎng)頁時鐘
這篇文章主要為大家詳細(xì)介紹了用JavaScript實(shí)現(xiàn)簡單網(wǎng)頁時鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08JS 獲取瀏覽器和屏幕寬高等信息的實(shí)現(xiàn)思路及代碼
本節(jié)代碼主要使用了Document對象關(guān)于窗口的一些屬性,附實(shí)現(xiàn)代碼及源程序解決,有需求的朋友可以參考下2013-07-07讓JavaScript擁有類似Lambda表達(dá)式編程能力的方法
在前幾天的博文中我發(fā)布了一個可以自定義頁碼呈現(xiàn)方式的組件,有C#和JavaScript兩個版本。2010-09-09javascript的漸進(jìn)增強(qiáng)與平穩(wěn)退化淺談
2013-11-11學(xué)習(xí)JSON.stringify的9大特性和轉(zhuǎn)換規(guī)則
本文介紹JSON.stringify9大特性和轉(zhuǎn)換規(guī)則,JSON.stringify()方法將一個JavaScript對象或值轉(zhuǎn)換為?JSON?字符串,如果指定了一個replacer?函數(shù),則可以選擇性地替換值,或者指定的replacer是數(shù)組,則可選擇性地僅包含數(shù)組指定的屬性,更多內(nèi)容需要的小火煸可以參考下面溫行內(nèi)容2022-02-02