[英]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.