2014-11-17 2 views
0

Почему п дают в следующем случае:Backslash побег в IndexOf

var str = '\\nvga032.bmwgroup.net\QXE7868\Daten\IE\3_bookmarks.zzz' 

var n = str.indexOf("\\"); 

alert(n) //0 

Конечно экранирующий символ для обратной косой черты

'\\' 

Я пропускаю что нибудь? Я ищу одиночный обратная косая черта в последней позиции. Я пробовал lastIndexOf, а также, что также дает ноль. Являются ли эти две вещи?

+0

Ваша начальная строка, вероятно, не дает того, чего вы ожидаете. он дает что-то вроде: «\ nvga032.bmwgroup.netQXE7868DatenIE_bookmarks.zzz» с некоторыми специальными символами в пределах – Joel

ответ

1

indexOf соответствует строке не исходный код JavaScript, который использовался для его создания.

A \ символ запускает escape-последовательность.

\\ - это escape-последовательность для «обратного слэша».

Строка, назначенная str, начинается с \\, которая помещает обратную косую черту в положение 0 в данных.

Строка, переданная indexOf, состоит всего из \\, которая соответствует первой обратной косой чертой в данных.


Если вы хотите, чтобы описать последовательность бежать в строке, которую вы будете использовать \\\\ (то есть последовательность для бэкслеша другой управляющей последовательностью для обратного косых черт, в результате данных, состоящих из двух обратных косых черт).

+0

, фактически не ищет двух обратных косых черт, только последний сингл обратной косой черты –

+0

Это будет 'lastIndexOf' IIRC, но вы уже получаете последнюю обратную косую черту в строке - в ней есть только одна обратная косая черта. Символ '' '' 'запускает escape-последовательность, помните? – Quentin

+0

Да, я понял, что строка неверна. Он не сбежал должным образом –

1

"\\" будет разобран до одной черной пятки. И тогда indexOf будет искать эту единую обратную косую черту, которая находится в начале строки (n = 0).

Если вы хотите найти два обратных слэша, вы должны будете indexOf("\\\\") (ЧЕТЫРЕ обратной косой черты, которые будут разобранные до двух буквенных символов обратной косой черты).

+0

Я на самом деле просто хочу последний обратный слэш. Я пробовал lastIndexOf, но это также дало мне 0 –

+1

Это также объясняется тем, что обратные косые черты вашей исходной строки выглядели как экраны 'Q',' D', 'I' и т. Д. Их также нужно удвоить:' var str = '\\\\ nvga ... \\ Q ... \\ Detc ...'; ' –

+1

Помните: обратные косые черты являются метасимволами. Они не существуют в строке JS как что-то ДРУГОЕ, чем метасимволы.Если вам нужна буквальная обратная косая черта в строке JS, вам нужно ее избежать: 'str =" \ foo "' является escape-кодом 'f', за которым следуют две буквы O. 'str =" \\ foo "' является буквальным обратным слэшем, за которым следует слово 'foo'. –

1

Ваша переменная «str», скорее всего, не содержит ожидаемых результатов. Вместо этого напишите:

var str = '\\\\nvga032.bmwgroup.net\\QXE7868\\Daten\\IE\\3_bookmarks.zzz' 
var n = str.lastIndexOf("\\");