我們首先來看如下代碼,在瀏覽器中輸出的是什么?
// 在瀏覽器中輸出的 console.log('\\'); // 輸出 \ console.log('\\\\'); // 輸出 \\
一:js正則直接量語法對 反斜杠的含義
1.1 \. 一個反斜杠加點號(.)
var reg1 = /^\.$/g; console.log(reg1.test('.')); // 輸出 true, 因為 \. 是對元字符.進行轉義,因此匹配字符串中的. console.log(reg1.test('a')); // 輸出false \. 轉義后只能匹配字符串中的. ,不再是元字符匹配任意單個字符了
1.2 \\. 兩個反斜杠加 (.)
在js正則表達式中,兩個反斜杠加點號(.), 兩個反斜杠會原樣輸出 \\ 字符串。元字符 . 匹配任意字符。
var reg2 = /^\\.$/g; console.log(reg2.test('\a')); // false console.log(reg2.test('\\a')); // true console.log(reg2.test('a')); // false console.log(reg2.test('\\ab')); // false console.log(reg2.test('\\.')); // true
1.3 \\\. 三個反斜杠和點號(.)
在js正則表達式中,三個反斜杠和 . ,前兩個反斜杠匹配兩個反斜杠,后面的 \. 是對元字符.號進行轉義,因此只能匹配字符串中的 . 號,不能匹配任意一個字符。
var reg3 = /^\\\.$/g; console.log(reg3.test('\a')); // false console.log(reg3.test('\\.')); // true console.log(reg3.test('a')); // false console.log(reg3.test('\\a')); // false
1.4 \\\\. 四個反斜杠加點號(.)
在js正則表達式中,四個反斜杠匹配四個反斜杠,然后后面的點號是匹配任意的字符,除點之外。
var reg4 = /^\\\\.$/g; console.log(reg4.test('\\a')); // false console.log(reg4.test('\\\.')); // false console.log(reg4.test('\\\a')); // false console.log(reg4.test('\\\\a')); // true console.log(reg4.test('\\\\.')); // false console.log(reg4.test('\\aa')); // false
2. JS中RegExp對象對反斜杠的含義
2.1 兩個反斜杠加點號(.)
兩個反斜杠加點的含義是:全局匹配字符串中帶有點號的。找到的話,就返回true,否則的話,返回false, 首先兩個反斜杠在正則 RegExp,返回一個反斜杠 \.
因此一個 反斜杠 \. 就是對元字符 . 進行轉義。因此只能匹配 . 號了。
如下代碼:
var reg11 = new RegExp('\\.', 'g'); console.log(reg11); // 輸出 /\./g console.log(reg11.test('.')); // true console.log(reg11.test('\.')); // false console.log(reg11.test('\a')); // false console.log(reg11.test('.a')); // true console.log(reg11.test('n.a')); // true
2.2 三個反斜杠加點號(.)
三個反斜杠和兩個反斜杠的含義一樣的。
var reg12 = new RegExp('\\\.', 'g'); console.log(reg12); // 輸出 /\./g console.log(reg12.test('.')); // true console.log(reg12.test('\.')); // false console.log(reg12.test('\a')); // false console.log(reg12.test('.a')); // true console.log(reg12.test('n.a')); // true
2.3 四個反斜杠加點號(.)
四個反斜杠加點號的含義是:在RegExp對象后,會返回 /\\./g, 然后是匹配字符串 \\ , 點號(.) 是元字符匹配任意的字符。
var reg12 = new RegExp('\\\\.', 'g'); console.log(reg12); // 輸出 /\\./g console.log(reg12.test('.')); // false console.log(reg12.test('\.')); // false console.log(reg12.test('\a')); // false console.log(reg12.test('.a')); // false console.log(reg12.test('n.a')); // false console.log(reg12.test('\\a')); // true console.log(reg12.test('\\aaaa')); // false console.log(reg12.test('\\.')); // true