LINUX.ORG.RU

Как заэкранировать обратный слеш?

 ,


0

2

Вопрос, наверное нубский, но как-то раньше особо не сталкивался, и нагуглить быстро не получилось. Вот это, например,


re1=/\\/
re2=/[\\]/

re1.test("foo\bar")
re2.test("foo\bar")

//  false
//  false
не работает. Как правильно?

Я что, про это спрашивал?

Слушай что тебе советуют и не выпендривайся.

\b это ASCII 0x8 BS (backspace), поэтому всё работает правильно - никаких обратных слешей в твоих строках нет.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от theKingOfJava

По ссылке я своего случая не нашел.

Как заэкранировать обратный слеш?

У тебя левый заголовок, значит :)

Но что-то «пошло не так», если не получается. Например, почитай, как работает test(). http://javascript.ru/basic/regular-expression #proverka-rezultatov:-metod-test И как собственно регэкспы: «При использовании кавычек нужно дублировать \ и нет возможности указать флаги. Если регулярное выражение уже задано строкой, то бывает удобна и полная форма» (с)

Т.е. при использовании кавычек, у тебя в примере, бэкслэш надо удваивать в строке иначе у тебя там эскейпится \b

slackwarrior ★★★★★
()
Ответ на: комментарий от slovazap

никаких обратных слешей в твоих строках нет.

Да? а чо там есть? Если я беру с пользовательского ввода строку? например, foo\bar и шлю на сервер, то она приходит в виде, foo%5Cbar, при прогоне через decodeURI получается foo\bar.

theKingOfJava
() автор топика
Ответ на: комментарий от slackwarrior

Т.е. при использовании кавычек, у тебя в примере, бэкслэш надо удваивать в строке иначе у тебя там эскейпится \b

при чем тут кавычки? текст в кавычках вычисляется как раз в строку. если я возьму строку из HTML будет то же самое, безо всяких кавычек.

бэкслэш надо удваивать в строке

То есть, просто так спарсить бкслешь невозможно, я правильно понимаю?

Допустим, я мог бы взять строку, заменить все бекслеши на //, затем распарсить. Но как я их заменю, если я не могу их спарсить? Замкнутый круг получается.

theKingOfJava
() автор топика
Ответ на: комментарий от theKingOfJava

Если пользователь ввел \, то у тебя на сервере никак не появится твоя строка без него («foo\bar»), на сервер приедет «foo\\bar»

anonymous
()
Ответ на: комментарий от theKingOfJava

при чем тут кавычки?

При твоем примере.

текст в кавычках вычисляется как раз в строку. если я возьму строку из HTML будет то же самое, безо всяких кавычек.

И так бывает. Только у тебя с точки зрения js в строке нет обратного слэша. Есть заэскейпленный b - и это не проблема js'а

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от theKingOfJava

Ответ:

re1=/\\/;
re1.test(decodeURI('foo%5Cbar'));
>> true
Информация для размышления:
decodeURI('foo%5Cbar') === "foo\bar"
>> false
decodeURI('foo%5Cbar') === "foo\\bar"
>> true

RAHATibnLUKUM
()
Ответ на: комментарий от theKingOfJava

Допустим, я мог бы взять строку, заменить все бекслеши на //, затем распарсить. Но как я их заменю, если я не могу их спарсить? Замкнутый круг получается.

Просто тут нужен неограниченный нондетерминизм.

Kuzy ★★★
()
Ответ на: комментарий от Kuzy

Не, опять ты попутал. Неограниченный нондетерминизм тут не при чем. То о чем ты говоришь — это МТ с оракулом, которая в неограниченный нондетерминизм не умеет.

theKingOfJava
() автор топика
Ответ на: комментарий от theKingOfJava

Открой стандарт и почитай про запись строк в кавычках, дебилоид.

tensai_cirno ★★★★★
()

Этот тред нужно оставить как эталонный для тех, кто всё ещё думает, что у anonimus'а остались зайчатки разума.

korvin_ ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.