W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
正如我們所看到的,反斜杠 ?\
? 用于表示字符類,例如 ?\d
?。所以它是正則表達(dá)式中的一個(gè)特殊字符(就像在常規(guī)字符串中一樣)。
還存在其它特殊字符,這些字符在正則表達(dá)式中有特殊的含義,例如 [ ] { } ( ) \ ^ $ . | ? * +
。它們用于執(zhí)行更強(qiáng)大的搜索。
現(xiàn)在并不需要嘗試記住它們 —— 當(dāng)我們分別學(xué)習(xí)它們的時(shí)候,你自然而然就會(huì)記住了。
假如我們想要找到一個(gè)點(diǎn)號(hào) .
。
要將特殊字符用作常規(guī)字符,請(qǐng)?jiān)谄淝懊婕由戏葱备埽?code>\.。
這就是所謂的“轉(zhuǎn)義字符”。
例如:
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1(匹配了?。?alert( "Chapter 511".match(/\d\.\d/) ); // null(尋找一個(gè)真正的點(diǎn) \.)
括號(hào)也是特殊字符,所以如果我們想要查找它們,我們應(yīng)該使用 \(
。下面的例子會(huì)查找一個(gè)字符串 "g()"
:
alert( "function g()".match(/g\(\)/) ); // "g()"
如果我們想查找反斜杠 \
,我們就應(yīng)該使用兩個(gè)反斜杠:
alert( "1\\2".match(/\\/) ); // '\'
斜杠符號(hào) '/'
并不是一個(gè)特殊字符,但是它被用于在 Javascript 中開(kāi)啟和關(guān)閉正則匹配:/...pattern.../
,所以我們也應(yīng)該轉(zhuǎn)義它。
下面是搜索斜杠 '/'
的表達(dá)式:
alert( "/".match(/\//) ); // '/'
從另一個(gè)方面看,如果我們沒(méi)使用 /.../
,而是使用另一種 new RegExp
的方式創(chuàng)建正則表達(dá)式,則不需要轉(zhuǎn)義斜杠:
alert( "/".match(new RegExp("/")) ); // 找到了 /
如果我們使用 new RegExp
創(chuàng)建正則表達(dá)式,那么我們不必轉(zhuǎn)義 /
,但需要進(jìn)行一些其他轉(zhuǎn)義。
例如,考慮下面這個(gè)示例:
let reg = new RegExp("\d\.\d");
alert( "Chapter 5.1".match(reg) ); // null
在之前的示例中我們使用 /\d\.\d/
進(jìn)行類似的搜索沒(méi)問(wèn)題,但 new RegExp("\d\.\d")
不起作用,為什么?
因?yàn)榉葱备鼙蛔址跋摹绷?。我們可能還記得,常規(guī)字符串有自己的特殊字符,例如 \n
,反斜杠用于轉(zhuǎn)義。
下面是 “\d.\d” 的感知形式:
alert("\d\.\d"); // d.d
在字符串中的反斜杠表示轉(zhuǎn)義或者類似 \n
這種只能在字符串中使用的特殊字符。這個(gè)引用會(huì)“消耗”并且解釋這些字符,比如說(shuō):
\n
? —— 變成一個(gè)換行字符,\u1234
? —— 變成該編碼所對(duì)應(yīng)的 Unicode 字符,\d
? 或者 ?\z
?,碰到這種情況時(shí)則會(huì)自動(dòng)移除反斜杠。所以調(diào)用 new RegExp
會(huì)獲得一個(gè)沒(méi)有反斜杠的字符串。這就是搜索不起作用的原因!
如果要修復(fù)這個(gè)問(wèn)題,我們需要雙斜杠,因?yàn)橐脮?huì)把 \\
變?yōu)?nbsp;\
:
let regStr = "\\d\\.\\d";
alert(regStr); // \d\.\d(現(xiàn)在對(duì)了)
let regexp = new RegExp(regStr);
alert( "Chapter 5.1".match(regexp) ); // 5.1
[ \ ^ $ . | ? * + ( )
,我們需要在它們前面加上一個(gè)反斜杠 \
(“轉(zhuǎn)義它們”)。/.../
內(nèi)(但不在 new RegExp
內(nèi)),我們還需要轉(zhuǎn)義 /
。new RegExp
時(shí),我們需要雙反斜杠 \\
,因?yàn)樽址?hào)會(huì)消耗一個(gè)反斜杠。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: