[英]Regular Expression in JS: \\. does not match \n
我得到一個包含換行符 (/n)、制表符 (/t) 和小寫字母 [az] 的字符串。 可以通過匹配/\\n|\\t/
來做到這一點。 AFAIK 點代表通配符。
因此我想知道,為什么/\\n|\\t/
與/\\\\./
不匹配相同的東西
var text = 'test1 \ntest2';
text.split(/\n/) //['test1', 'test2']
text.split(/\./) //['test1 \ntest2']
text.split(/\\./) //['test1 \ntest2']
不應該是\\\\.
匹配\\n
(換行符)?
讓我試着回答所有要點:
AFAIK 點代表通配符。
不,在正則表達式中,我們不使用術語“通配符”。 它是一個特殊的正則表達式(元)字符。 JavaScript regex 中的點匹配除換行符以外的任何字符。
我想知道,為什么
/\\n|\\t/
與/\\\\./
不匹配相同的東西
因為/\\n|\\t/
匹配 1 個符號,換行符或制表符,而正則表達式/\\\\./
匹配文字\\
和換行符以外的字符。
\\n
和\\t
是轉義序列。 這意味着\\
不是文字反斜杠,它與以下符號一起形成一個代碼單元,一個不能以其他方式編寫的字符串。 的確,我們如何用筆在紙上寫一個換行符? 沒門!
在此處查看有關JavaScript 字符轉義序列的更多信息。
現在,
text.split(/\\n/) //['test1', 'test2']
是的,您的輸入字符串包含換行符,因此,您會在結果數組中獲得兩個元素
text.split(/\\./) //['test1 \\ntest2']
未找到匹配項,因為\\.
匹配一個文字點。 正則表達式中被轉義的點(在它之前有一個文字\\
)不再是一個特殊的正則表達式元字符,而只是匹配它的文字表示。 您的字符串沒有點,因此沒有匹配項。
text.split(/\\\\./) //['test1 \\ntest2']
同樣,沒有找到匹配項,因為/\\\\./
查找文字\\
后跟除換行符以外的任何字符。
提示:在regex101.com 上使用你的表達式,它會告訴你你的正則表達式可以在右邊匹配什么。
在這里,使用正則表達式,您有一個文字符號 ( /.../
)。 在文字符號中, \\
被視為文字,因此,您不必將其轉義兩次。 如果您使用構造函數表示法(即RegExp(....)
),則必須使用雙重轉義。 例如
var re = /\\./; // is equal to
var re = new RegExp("\\\\.");
在MDN RegExp
幫助頁面查看更多關於構造函數和文字符號的信息。
\\n
被評估為一個新行,因此您實際上是在匹配一個空字符串。 如果你做一個快速的console.log('\\n');
你可以看到它的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.