2009-10-27 5 views
2

J'ai écrit un code suivant pour obtenir juste le nom de fichier sans extension et chemin. Je l'exécute dans le navigateur.Recherche de '' en utilisant javascript

<script type="text/javascript"> 
var str=new String("C:\Documents and Settings\prajakta\Desktop\substr.html"); 
document.write(str); 
var beg=str.lastIndexOf("\");// **HERE IS THE PROBLEM IT DOESNT GIVE ME THE INDEX OF '\'** 
alert(beg); 
var end=str.lastIndexOf ("."); 
alert(end); 
document.write("<br>"+str.slice(beg+1,end)); 
</script> 

mais le même code fonctionne si je remplace '\' par un autre caractère ('p'); Je m initialise var str juste pour ex mais dans mon application ce n'est pas toujours fixe. Comme je suis nouveau sur Javascript, tout le monde peut me dire quel est le problème? Comment le résoudre?

+0

Demander un éditeur pour modifier le titre pour refléter le problème d'échappement. Des accessoires fous pour la fixation du corps du texte (espacement, casquettes, etc.). – JXG

+0

N'oubliez pas d'accepter une réponse (la première correcte ou la plus utile pour vous). – PhiLho

Répondre

4

Vous devez échapper à votre antislash. Utilisez les éléments suivants:

var beg=str.lastIndexOf("\\"); 

EDIT: Oui, il donnera un -1 à moins que vous les backslashs dans votre chaîne d'origine aussi bien :)

Utilisez ceci:

var str=new String("C:\\Documents and Settings\\prajakta\\Desktop\\substr.html"); 

Backslash est le caractère d'échappement Javascript - cela signifie que les caractères qui suivent une barre oblique inversée font référence à des caractères spéciaux. Ainsi, dans votre chaîne d'origine, \ prajakta serait interprété comme '\ p' + 'rajakta' où '\ p' a une signification très différente. Ainsi, vous devez utiliser '\\' partout dans chaque chaîne.

+0

merci Mon problème est résolu ............... –

0

Vous devez échapper "\" dans la plupart des langues, car \ est une séquence d'échappement. Javascript est probablement le même.

Essayez plutôt de rechercher "\\" (sans espace). En outre, remplacer "C:\Docume..." avec "C:\\Documents..." pour la même raison

0

Backslash est généralement le caractère d'échappement, de sorte que vous devrez entrer deux fois à chaque fois qu'il se produit dans une chaîne, à savoir votre

var str=new String("C:\Documents and Settings\prajakta\Desktop\substr.html"); 

devrait lire

var str=new String("C:\\Documents and Settings\\prajakta\\Desktop\\substr.html"); 

La chose est, \D est interprété par le moteur javascript, et sera remplacé par le caractère spécial approprié (dans ce cas, je ne crois pas qu'il y ait un caractère spécial \D (ou 'p' ou 's'), donc il sera remplacé par un simple D, et votre s contenu tring sera

"C:Documents and SettingsprajaktaDesktopsubstr.html" 

Allez-y, vérifiez avec un simple

if (str == "C:Documents and SettingsprajaktaDesktopsubstr.html") alert("Doh! :)"); 

il devrait vous donner l'alerte.

En outre, votre

var beg=str.lastIndexOf("\"); 

devrait lire

var beg=str.lastIndexOf("\\"); 

HTH.

+0

Merci beaucoup ......... Il travaille ...... –

0

Avant de mettre votre chaîne dans la variable que vous devez escape(String) il.

1

"\" est le caractère d'échappement, essayez avec "\\"

Quoi qu'il en soit, je le ferais avec regexes, juste parce que je les aime :)

var str=new String("C:\\Documents and Settings\\prajakta\\Desktop\\substr.html"); 
document.write(str); 
document.write("<br>"+str.replace(/^.*\\/,"").replace(/\..*?$/,"")); 

Oh, et les tests j'ai vu que vous devez échapper les barres obliques inverses dans la chaîne de test aussi!

0

en plus de ce qui a déjà dit, « nouvelle chaîne » n'a pas de sens ici

var str="C:\\Documents and Settings\\prajakta\\Desktop\\substr.html"; 

et oui, regexps sont la voie à suivre

fileName = str.match(/([^\\.]+)\.\w+$/)[1] 
Questions connexes