溫馨提示×

溫馨提示×

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

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

如何理解JavaScript正則表達式

發布時間:2021-09-30 16:02:52 來源:億速云 閱讀:162 作者:柒染 欄目:編程語言

如何理解JavaScript正則表達式,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、正則表達式創建

1.var reg = /test/;

2.var reg = new RegExp('test');

3.正則表達式的exec方法

var reg = /test/;

var str = 'testrjf';

var res = reg.exec(str);

//會匹配str里面test內容,有就返回匹配的該內容,沒有返回null

console.log(res);//數組形式保存test

二、正則表達式模式

這里寫一個方法方便后面演示

function execReg(reg,str){

var result = reg.exec(str);

console.log(result);

}1.一片兩片三四片,落盡正則全不見{n},{n-1,n},{1,}。

reg = /c{1}/;//匹配一個c

str='cainiao';

execReg(reg,str);//返回c

reg = /c{2}/;//匹配兩個連續的c,{n}同理

str1='ccaniao';

str2='cacniao';

execReg(reg,str1);//返回cc

execReg(reg,str2);//返回null,沒有兩個連續cc

reg = /c{3,4}/;//匹配3個或4連續的c

str1='cccTest';

str2='ccccTest';

execReg(reg,str1);//返回ccc

execReg(reg,str2);//返回cccc。(正則會盡量多的匹配)

reg = /c{1,}/;//匹配1個以上的c。{2,}{3,}...同理

str1='cccTest';

str2='chjjk';

execReg(reg,str1);//返回ccc

execReg(reg,str2);//返回c

reg='/c*/和等同于reg='/c{0,}/

reg='/c+/和等同于reg='/c{1,}/

reg='/c?/和等同于reg='/c{0,1}/

這里在提示一下,正則表達式會盡可能匹配多的目標返回,有4個就不會返回3個

2./^開頭,結尾$/

^開頭

reg = /^c/;//^表示只匹配字符串的開頭

str1='維生素c';

str2='cainiao';

execReg(reg,str1);//結果為null,因為字符串‘ 外匯分析師’的開頭并不是c

execReg(reg,str2);//這次則返回c

結尾$

reg = /c$/;//$匹配字符串結尾的字符

str1='cainiao';

str2='維生素c';

execReg(reg,str1);//返回null

execReg(reg,str2);//返回c

3.點“.”

reg = /./;//'.'會匹配字符串中除了換行符\n之外的所有字符

str1='cainiao';

str2='bainiao';

execReg(reg,str1);//正則匹配到了字符c

execReg(reg,str2);//正則匹配到了字符b

reg = /.+/;

str1='blueidea—經典論壇  好_。';

str2='bbs.blueidea.com';

str3='\ncainiao';

execReg(reg,str1);

//返回'blueidea—經典論壇  好_。'所有的字符都被匹配到了

execReg(reg,str2);//返回'bbs.blueidea.com'

execReg(reg,str3);//返回null

4.或“|“

reg = /b|c/;

str1='blueidea';

str2='cainiao';

execReg(reg,str1);//返回b

execReg(reg,str2);//返回c

reg = /^b|c.+/;

str='cainiao';

execReg(reg,str);//返回cainiao,理解成開頭b|c然后.+

reg = /^b|c.+/;

str='bbs.blueidea.com';

execReg(reg,str);//返回b,這里看成開頭的b或者是c.+

5.括號

reg = /^(b|c).+/;

str='bbs.blueidea.com';

execReg(reg,str);//此時才是開頭b|c,然后.+

//回的結果后面多出來一個“,b“,這是()內的b|c所匹配的內容。

//我們在正則表達式內括號里寫的內容會被認為是子正則表達式,所匹配的結果也會被記錄下來供后面使用。我們暫且不去理會這個特性。

6.字符集合[abc]

reg = /^[abc]/;//[abc]表示a或者b或者c中的任意一個字符

str='bbs.blueidea.com';

execReg(reg,str);//返回b

reg = /^[a-zA-Z][a-zA-Z0-9_]+/;//先^[a-zA-Z],后[a-zA-Z0-9_]+

str='test';

execReg(reg,str);//返回test

7.反字符集合[^abc]

reg = /[^abc]/;

str='blueidea';

execReg(reg,str);//返回l(即第一個b沒有匹配)

即:[^0-9] 表示非數字,[^a-z] 表示非小寫字母…

8.邊界與非邊界

\b表示的邊界的意思

reg = /\bc/;//表示字符串開始的c或者是結尾的c

str1='cainiao';

str2='維生素c';

execReg(reg,str1);//返回c,左邊界的c

execReg(reg,str2);//返回c,右邊界的c

\B表示非邊界

reg = /\Bc/;//表示字符串除了開始(結尾)的c

str='aicniao';

execReg(reg,str);//返回c,中間的c

9.數字與非數字

\d表示數字的意思

reg = /\d/;

str='cainiao8';

execReg(reg,str);//返回8

\D表示非數字的意思

reg = /\d/;

str='cainiao8';

execReg(reg,str);//返回c

10.空白

\f匹配換頁符,\n匹配換行符,\r匹配回車,\t匹配制表符,\v匹配垂直制表符。

\s匹配單個空格,等同于[\f\n\r\t\v]。

reg = /\s.+/;

str='This is a test  String.';

execReg(reg,str);//返回'is a test  String.',匹配第一個空格以及其后的所有非換行字符。

\S表示非空格字符。

reg = /\S+/;

str='This is a test  String.';

execReg(reg,str);//This,當遇到第一個空格之后,正則就停止匹配

11.單詞字符

\w表示單詞字符,等同于字符集合[a-zA-Z0-9_]。

reg = /\w+/;

str='.blueidea';

execReg(reg,str);//blueidea

\W表示非單詞字符,等效于[^a-zA-Z0-9_]。

reg = /\W+/;

str='中文如何?';

execReg(reg,str);//'中文如何?'

12.反向引用

reg = /(\w)\1/;

str1='blueidea';

str2='bblueidea';

execReg(reg,str1);//返回null

execReg(reg,str2);//bb

//這里的“\1”就叫做反向引用,它表示的是第一個括號內的字正則表達式匹配的內容。

//在上面的例子中,第一個括號(\w)匹配了b,“\1”就同樣表示b了,在余下的字符串里自然找不到b了。

13.不記錄子正則表達式的匹配結果

使用形如(?:pattern)的正則就可以避免保存括號內的匹配結果

reg = /^(?:b|c).+/;

str='bbs.blueidea.com';

execReg(reg,str);//返回bbs.blueidea.com

//前面提到的括號里子表達式不被保存

14.正向預查

形式:(?=pattern),即要匹配的字符串,后面必須緊跟著pattern!

reg = /cainiao(?=8)/;//只是后面必須跟著8,但結果不匹配8

str1='cainiao9';

str2='cainiao8';

execReg(reg,str1);//返回null

execReg(reg,str2);//返回cainiao

形式:(?!pattern)和?=恰好相反,要求字符串的后面不能緊跟著某個pattern

reg = /cainiao(?!8)/;

str1='cainiao9';

str2='cainiao8';

execReg(reg,str1);//返回cainiao

execReg(reg,str2);//返回null

15.匹配元字符

*,+,?之類的符號,它們在正則表達式中都有一定的特殊含義,類似這些有特殊功能的字符都叫做元字符。那我們想匹配’c?'這種字符串呢?

reg = /c\?/;

str='c?';

execReg(reg,str);//返回'c?'

三、正則表達式修飾符

1.i: 執行對大小寫不敏感的匹配。

var reg = /b/;

var str = 'BBS';

execReg(reg,str);//返回null

var reg = /b/i;

var str = 'BBS';

execReg(reg,str);//B

2.g: 執行全局匹配(查找所有匹配而非在找到第一個匹配后停止)

在后面進行講解

3.m: 執行多行匹配。

reg = /^b/;

str = 'test\nbbs';//有換行

execReg(reg,str);//null

reg = /^b/m;

str = 'test\nbbs';

execReg(reg,str);//返回b,換行后第二行b開頭

四、正則表達式方法

1.exec方法

exec方法返回的其實并不是匹配結果字符串,而是一個對象,簡單地修改一下execReg函數,來做一個實驗就可以印證這一點。

function  execReg(reg,str){

var result =  reg.exec(str);

console.log(typeof result);

reg = /b/;

str='bbs.bblueidea.com';

execReg(reg,str);

//顯示result的類型是object。而且是一個類似數組的對象。

其中屬性:index input  0。其中index是表示匹配在原字符串中的索引;而input則是表示輸入的字符串;至于0則是表示只有一個匹配結果,可以用下標0來引用這個匹配結果,這個數量可能改變。我們可以通過返回值的length屬性來得知匹配結果的總數量。

然后修改execReg函數

function  execReg(reg,str){

var result =  reg.exec(str);

console.log('index:'+result.index+'\n'+'input:'+result.input+'\n');

for(i=0;i<1result.length;i++){ style="overflow-wrap: break-word" p=""

console.log('result['+i+']:'+result[i]+'\n');

reg  = /\w/;

str='bbs.bblueidea.com';

execReg(reg,str);

看完上述內容,你們掌握如何理解JavaScript正則表達式的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女