溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS正則表達式常見用法實例詳解

發(fā)布時間:2020-09-29 11:08:56 來源:腳本之家 閱讀:140 作者:行果 欄目:web開發(fā)

本文實例講述了JS正則表達式常見用法。分享給大家供大家參考,具體如下:

前言:正則表達式(regular expression)反反復復學了多次,學了又忘,忘了又學,這次打算把基本的東西都整理出來,加強記憶,也方便下次查詢。

學習正則表達式之前首先需要掌握記憶這些基本概念:

1.元字符:(.,\w,\W,\d,\D,\s,/S,^,$,)

字符 含義
. 匹配除了換行符以外的任意字符。
\s 代表任意空白符(換行符,制表符,空格)
\S 匹配任意非空字符串
\b 匹配單詞邊界,匹配單詞的開頭和結尾。
\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'。
$ 匹配字符串的結束。例如,/t$/ 并不會匹配 "eater" 中的 't',但是會匹配 "eat" 中的 't'。 QQ號必須為5位到12位數(shù)字時,可以使用:^\d{5,12}$

我們發(fā)現(xiàn)\W加大寫字母都是表示相反的意思。

2.分組符([],(),{});

字符 含義
() 如果想要重復多個字符該怎么辦?你可以用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數(shù)了。eg: (\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹配1到3位的數(shù)字,(\d{1,3}\.){3}匹配三位數(shù)字加上一個英文句號(這個整體也就是這個分組)重復3次,最后再加上一個一到三位的數(shù)字(\d{1,3})。
[] 代表一個字符集合。匹配方括號的中任意字符,包括轉義序列。你可以使用破折號(-)來指定一個字符范圍。對于點(.)和星號(*)這樣的特殊符號在一個字符集中沒有特殊的意義。他們不必進行轉義,不過轉義也是起作用的。例如,[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,}
+ 匹配前面一個表達式1次或者多次。等價于 {1,}。
? 匹配前面一個表達式0次或者1次。等價于 {0,1}。
{n,m} 匹配n到m次
x(?=y) 匹配'x'僅僅當'x'后面跟著'y'.這種叫做正向肯定查找。 例如,/Jack(?=Sprat)/會匹配到'Jack'僅僅當它后面跟著'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack'僅僅當它后面跟著'Sprat'或者是‘Frost'。但是‘Sprat'和‘Frost'都不是匹配結果的一部分。
x(?!y) 匹配'x'僅僅當'x'后面不跟著'y',這個叫做正向否定查找。 例如,/\d+(?!\.)/匹配一個數(shù)字僅僅當這個數(shù)字后面沒有跟小數(shù)點的時候。正則表達式/\d+(?!\.)/.exec("3.141")匹配‘141'但是不是‘3.141'

實例解析:

var reg = /\(?0\d{2}[) -]?\d{8}/

“(”和“)”也是元字符,后面的分組節(jié)里會提到,所以在這里需要使用轉義。
這個表達式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進行一些分析吧:首先是一個轉義字符\(,它能出現(xiàn)0次或1次(?),然后是一個0,后面跟著2個數(shù)字(\d{2}),然后是)或-或空格中的一個,它出現(xiàn)1次或不出現(xiàn)(?),最后是8個數(shù)字(\d{8})。

以下通過實例來講解RegExp:

需求一:在一句話英文中匹配一個hi的單詞。

var str = 'Hi RegExp I love you so much Hi Hi hi';
var reg = new RegExp("\\bhi\\b","gi");//g是一個修飾符,表示全局匹配。\b是一個元字符,代表單詞邊界,匹配單詞的開頭和結尾。
//直接量語法:
reg2 = /\bhi\b/gi;
console.log(str.match(reg2));//['hi','hi','hi','hi']
//升級
//匹配hi后面不遠處跟著一個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ù)寫多次的方法很笨哎,所以引進了變量。
regTel = /0\d{3}-\d{8}/;
console.log(tel.match(regTel));//0123-88752314;

需求三:寫一個清除字符串前后空格的正則表達式。

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

參考文章:

https://www.jb51.net/books/513871.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#
//www.jb51.net/article/72867.htm
https://www.jb51.net/article/107796.htm

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript正則表達式技巧大全》、《JavaScript替換操作技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript中json操作技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數(shù)學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI