国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 13:38:19
字體:
來源:轉載
供稿:網友

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

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

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

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

字符 含義
. 匹配除了換行符以外的任意字符。
/s 代表任意空白符(換行符,制表符,空格)
/S 匹配任意非空字符串
/b 匹配單詞邊界,匹配單詞的開頭和結尾。
/B 匹配一個非單詞邊界
/d 匹配一個數字,等價于[0-9]
/D 匹配一個數字,等價于[^0-9]
/w 匹配一個單字字符(字母、數字或者下劃線)等價于[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位數字時,可以使用:^/d{5,12}$

我們發現/W加大寫字母都是表示相反的意思。

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

字符 含義
() 如果想要重復多個字符該怎么辦?你可以用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數了。eg: (/d{1,3}/.){3}/d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:/d{1,3}匹配1到3位的數字,(/d{1,3}/.){3}匹配三位數字加上一個英文句號(這個整體也就是這個分組)重復3次,最后再加上一個一到三位的數字(/d{1,3})。
[] 代表一個字符集合。匹配方括號的中任意字符,包括轉義序列。你可以使用破折號(-)來指定一個字符范圍。對于點(.)和星號(*)這樣的特殊符號在一個字符集中沒有特殊的意義。他們不必進行轉義,不過轉義也是起作用的。例如,[abcd] 和[a-d]是一樣的。他們都匹配"brisket"中得‘b',也都匹配“city”中的‘c'。/[a-z.]+/ 和/[/w.]+/都匹配“test.i.ng”中得所有字符。
{} 表示量詞的范圍的。

3.修飾符(i,g,m);

字符 含義
i 忽略大小寫
g 執行全局匹配
m 執行多行匹配

4.量詞(*,?,+,-,{n,m},?=n,?!=n);

字符 含義
* 匹配任意次,.*連在一起就意味著任意數量的不包含換行的字符。等價于{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+(?!/.)/匹配一個數字僅僅當這個數字后面沒有跟小數點的時候。正則表達式//d+(?!/.)/.exec("3.141")匹配‘141'但是不是‘3.141'

實例解析:

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

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

以下通過實例來講解RegExp:

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

var str = 'Hi RegExp I love you so much Hi Hi hi';var reg = new RegExp("http://bhi//b","gi");//g是一個修飾符,表示全局匹配。/b是一個元字符,代表單詞邊界,匹配單詞的開頭和結尾。//直接量語法:reg2 = //bhi/b/gi;console.log(str.match(reg2));//['hi','hi','hi','hi']//升級//匹配hi后面不遠處跟著一個lucyvar 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代表一個數字,等價于[0-9],/D匹配一個非數字字符,等價于[^0-9]var tel = "0123-887523146";console.log(tel.match(reg));//0123-88752314;//這個連續寫多次的方法很笨哎,所以引進了變量。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);//14console.log(str2.trim().length);//8console.log(str2.trim());//hi space

需求四:匹配一個郵箱。

var eReg = //S*@/S*/./S*/;console.log(eReg.test('873619879@qq.com'))//true

參考文章:

http://m.survivalescaperooms.com/books/513871.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#
//m.survivalescaperooms.com/article/72867.htm
http://m.survivalescaperooms.com/article/107796.htm

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

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都匀市| 和林格尔县| 孝感市| 遵化市| 郯城县| 永定县| 怀柔区| 中江县| 江孜县| 石棉县| 怀仁县| 舞钢市| 尼玛县| 牟定县| 临猗县| 疏勒县| 柳州市| 新民市| 突泉县| 沛县| 禹城市| 兴仁县| 中卫市| 松阳县| 扶风县| 启东市| 舟山市| 泸定县| 陇南市| 达拉特旗| 孝义市| 兰西县| 万载县| 沂水县| 无极县| 永安市| 璧山县| 班玛县| 开鲁县| 疏附县| 镇巴县|