Позвольте мне попытаться ответить на все вопросы:
AFAIK точки представляет собой групповой символ.
Нет, в regex мы не используем термин «подстановочный знак». Это special regex (meta)character. Точка в регулярном выражении JavaScript соответствует любому символу, но символу новой строки.
мне было интересно, почему /\n|\t/
не соответствуют тем же вещам, /\\./
Потому что /\n|\t/
матчей 1 символа, либо символа новой строки или табуляции, в то время как регулярное выражение /\\./
буквального \
и характер кроме новой строки.
\n
и \t
являются escape-последовательности. Это означает, что \
не является буквальным обратным слэшем, который вместе со следующим символом образует блок кода, строку, которая не может быть записана иначе. Действительно, как мы можем написать разрыв строки на бумаге с помощью пера? Ни за что!
Подробнее о JavaScript character escape sequences here.
Теперь
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
help page.
Зачем ему не возвращать null? '\ n' - это один символ, а не символ \, а затем' n' – anubhava
'/\\./' соответствует обратную косую черту, за которой следует символ без символа новой строки. '/\./' соответствует буквенному '.'. – melpomene
@Moezalez Почему? Строка ввода не содержит обратную косую черту. – melpomene