43

Do i have to escape slashes when putting them into regular expression?

myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

Instead of printing "test", it prints the whole source string.

See this demo:

http://jsbin.com/esaro3/2/edit

Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563
Radek Simko
  • 15,886
  • 17
  • 69
  • 107

5 Answers5

52

Your regex is perfect, and yes, you must escape slashes since JavaScript uses the slashes to indicate regexes.

However, the problem is that JavaScript's replace method does not perform an in-place replace. That is, it does not actually change the string -- it just gives you the result of the replace.

Try this:

myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

This sets myString to the replaced value.

Reid
  • 18,959
  • 5
  • 37
  • 37
21

/[\/]/g matches forward slashes.
/[\\]/g matches backward slashes.

f_puras
  • 2,521
  • 4
  • 33
  • 38
rajesh_kw
  • 1,572
  • 16
  • 14
14

Actually, you don't need to escape the slash when inside a character class as in one part of your example (i.e., [^\/]* is fine as just [^/]*). If it is outside of a character class (like with the rest of your example such as \/courses), then you do need to escape slashes.

Brett Zamir
  • 14,034
  • 6
  • 54
  • 77
9

string.replace doesn't modify the original string. Instead, a returns a new string that has had the replacement performed.

Try:

myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));
Anon.
  • 58,739
  • 8
  • 81
  • 86
3

Note, that you don't have to escape / if you use new RegExp() constructor:

console.log(new RegExp("a/b").test("a/b"))
Maxim Mazurok
  • 3,856
  • 2
  • 22
  • 37