簡體   English   中英

JS 中的正則表達式:\\\\. 不匹配\\n

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

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