国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Javascript 轉義,特殊字符

2023-02-17 11:01 更新

正如我們所看到的,反斜杠 ?\? 用于表示字符類,例如 ?\d?。所以它是正則表達式中的一個特殊字符(就像在常規(guī)字符串中一樣)。

還存在其它特殊字符,這些字符在正則表達式中有特殊的含義,例如 [ ] { } ( ) \ ^ $ . | ? * +。它們用于執(zhí)行更強大的搜索。

現(xiàn)在并不需要嘗試記住它們 —— 當我們分別學習它們的時候,你自然而然就會記住了。

轉義

假如我們想要找到一個點號 .。

要將特殊字符用作常規(guī)字符,請在其前面加上反斜杠:\.。

這就是所謂的“轉義字符”。

例如:

alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1(匹配了?。?alert( "Chapter 511".match(/\d\.\d/) ); // null(尋找一個真正的點 \.)

括號也是特殊字符,所以如果我們想要查找它們,我們應該使用 \(。下面的例子會查找一個字符串 "g()"

alert( "function g()".match(/g\(\)/) ); // "g()"

如果我們想查找反斜杠 \,我們就應該使用兩個反斜杠:

alert( "1\\2".match(/\\/) ); // '\'

一個斜杠

斜杠符號 '/' 并不是一個特殊字符,但是它被用于在 Javascript 中開啟和關閉正則匹配:/...pattern.../,所以我們也應該轉義它。

下面是搜索斜杠 '/' 的表達式:

alert( "/".match(/\//) ); // '/'

從另一個方面看,如果我們沒使用 /.../,而是使用另一種 new RegExp 的方式創(chuàng)建正則表達式,則不需要轉義斜杠:

alert( "/".match(new RegExp("/")) ); // 找到了 /

new RegExp

如果我們使用 new RegExp 創(chuàng)建正則表達式,那么我們不必轉義 /,但需要進行一些其他轉義。

例如,考慮下面這個示例:

let reg = new RegExp("\d\.\d");

alert( "Chapter 5.1".match(reg) ); // null

在之前的示例中我們使用 /\d\.\d/ 進行類似的搜索沒問題,但 new RegExp("\d\.\d") 不起作用,為什么?

因為反斜杠被字符串“消耗”了。我們可能還記得,常規(guī)字符串有自己的特殊字符,例如 \n,反斜杠用于轉義。

下面是 “\d.\d” 的感知形式:

alert("\d\.\d"); // d.d

在字符串中的反斜杠表示轉義或者類似 \n 這種只能在字符串中使用的特殊字符。這個引用會“消耗”并且解釋這些字符,比如說:

  • ?\n? —— 變成一個換行字符,
  • ?\u1234? —— 變成該編碼所對應的 Unicode 字符,
  • ……而當沒有特殊含義時:如 ?\d? 或者 ?\z?,碰到這種情況時則會自動移除反斜杠。

所以調用 new RegExp 會獲得一個沒有反斜杠的字符串。這就是搜索不起作用的原因!

如果要修復這個問題,我們需要雙斜杠,因為引用會把 \\ 變?yōu)?nbsp;\

let regStr = "\\d\\.\\d";
alert(regStr); // \d\.\d(現(xiàn)在對了)

let regexp = new RegExp(regStr);

alert( "Chapter 5.1".match(regexp) ); // 5.1

總結

  • 要在字面意義上搜索特殊字符 [ \ ^ $ . | ? * + ( ),我們需要在它們前面加上一個反斜杠 \(“轉義它們”)。
  • 如果在 /.../ 內(但不在 new RegExp 內),我們還需要轉義 /。
  • 當將字符串傳遞給給 new RegExp 時,我們需要雙反斜杠 \\,因為字符串引號會消耗一個反斜杠。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號