tags:

views:

107

answers:

8

I have written a following code to get just the file name without extension and path.I m running it in browser.

<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>

but the same code code works if i replace'\' by another character ex.('p'); i m initializing var str just for ex but in my application it is not always fixed.As i m new to Javascript can any body plz tell me what is the problem?n how to solve it?

A: 

You need to escape "\" in most languages, because \ is an escape-sequence. Javascript is probably the same.

Try searching for "\\" (without the space) instead. Also, replace "C:\Docume..." with "C:\\Documents..." for the same reason

laura
A: 

Try

lastIndexOf("\\")
cherouvim
+1  A: 

You need to escape your backslash character. Use the following:

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

EDIT: Yes, it will give a -1 unless you escape the backslashes in your original string as well :)

Use this:

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

Backslash is the Javascript escape character - this means that characters following a backslash refer to special characters. Thus, in your original string, \prajakta would be interpreted as '\p' + 'rajakta' where '\p' has a very different meaning. Thus, you need to use '\\' everywhere in every string.

Crimson
thanks My problem is solved...............
Prajakta B.
A: 

Backslash is generally the escape character, so you'll have to enter it twice whenever it occurs in a string, i.e. your

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

should read

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

The thing is, \D is interpreted by the javascript engine, and will be replaced by the appropriate special character (in this case, I don't believe there's a special character \D (or 'p' or 's'), so it'll be replaced by simply D, and your string contents will be

"C:Documents and SettingsprajaktaDesktopsubstr.html"

Go ahead, check it with a simple

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

it should give you the alert.

Also, your

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

should read

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

HTH.

roe
Thank u so much.........It is working......
Prajakta B.
+4  A: 

Read this article on escaping javascript strings using backslash \

Ghommey
A: 

Before putting your string into the variable you should escape(String) it.

Augenfeind
+1  A: 

"\" is the escape character, try with "\\"

Anyway, I would do it with regexes, just because I like them :)

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

Oh, and testing I saw that you have to escape the backslashes in the test string also!

Victor
A: 

in addition to what's already said, "new String" makes no sense here

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

and yes, regexps are the way to go

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