簡體   English   中英

RegExp構造函數轉義斜杠字符但不轉義點

[英]RegExp constructor escapes slash character but not dot

說我有這個:

console.log(new RegExp('.git'));
console.log(new RegExp('scripts/npm'));

結果是:

/.git/
/scripts\/npm/

我的問題是 - 為什么它在腳本/ npm中逃避斜線,但它沒有逃脫。 在.git? 這是什么押韻和理由?

注意,在這種情況下 ,正在從命令行傳遞正則表達式字符串,因此我需要使用RegExp將它們轉換為正則表達式。

未轉義/表示正則表達式的開頭和結尾。 傳入包含/到構造函數的字符串時,當然/是正則表達式的一部分 ,而不是表示開頭或結尾的符號。

. 完全是另一回事,並沒有任何RE分隔符,所以它保持原樣。

請注意,如果您希望正則表達式匹配文字點(而不是任何字符),則在使用構造函數時需要對其進行雙重轉義:

console.log(new RegExp('\\.git'));

在JS中編寫正則表達式時,可以使用兩個/來初始化正則表達式字符串。 這稱為正則表達式文字初始化。 更多關於它的信息

例如

let re = /(\w+)\s(\w+)/;

現在,對於為什么它在/之前附加\\的問題,它只是由於RegExp處理傳遞的字符串文字的方式。 這可以防止傳遞的字符串損壞,從而確保所有傳遞的字符都被計算在內。 此外,如果檢查RegExp返回的對象,我們可以看到實際的source屬性設置為scripts\\\\/npm 所以,第一個\\表示第二個\\字面意義。 雖然從正則表達式透視\\ ,它簡單地逸出行進/以形成正則表達式的文字符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM