Почему String.raw может обрабатывать двойную обратную косую черту, а обычное экранирование - нет? - PullRequest
1 голос
/ 21 апреля 2019

Для совпадения двойных обратных косых черт в строке требуется две escape-обратной косой черты. Но событие, которое не совпадает в нативных функциях JavaScript, как показано ниже:

const str = 'sj\\sf\sd'

str.match(/\\\\/g);                  /*null*/
str.indexOf('\\\\');                 /*-1*/
str.replace(/\\\\/, '')              /*'sj\sfsd'*/   /*<--wrong characters replaced*/

Тогда как String.raw работает:

const str = String.raw`sj\\sf\sd`

str.match(/\\\\/g);                  /*['\\']*/
str.indexOf('\\\\');                 /*2*/
str.replace(String.raw`\\`, '')      /*'sjsf\sd'*/

Подобные вопросы были заданы по этой теме, но никто не объясняет причину этой причудливости:

1 Ответ

2 голосов
/ 21 апреля 2019

Это именно то, для чего String.raw: он не интерпретирует escape-последовательности.У обратной косой черты есть особое значение в строке, поэтому вам нужно удвоить ее, чтобы получить одну действительную обратную косую черту.При String.raw (большинство) специальные символы теряют свое особое значение, поэтому две обратные косые черты фактически являются двумя обратными косыми чертами.Он используется именно тогда, когда вам нужна строка со многими специальными символами, и вы не хотите беспокоиться о том, чтобы экранировать их слишком часто.

...