Short 'n Sweet
===

 function escapeRegExp(str) {
 return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
 }
 
See [MDN: Javascript Guide: Regular Expressions](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions)

 escapeRegExp("All of these should be escaped: \ ^ $ * + ? . ( ) | { } [ ]");

 >>> "All of these should be escaped: \\ \^ \$ \* \+ \? \. \( \) \| \{ \} \[ \] "

Other symbols (~`!@# ...) MAY be escaped without consequence, but are not required to be.

.

.

.

.

Test Case: A typical url
---

 escapeRegExp("/path/to/resource.html?search=query");

 >>> "\/path\/to\/resource\.html\?search=query"



The Long Answer
===

If you're going to use the function above at least link to this stack overflow post in your code's documentation so that it doesn't look like crazy hard-to-test voodoo.

 var escapeRegExp;

 (function () {
 // Referring to the table here:
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp
 // these characters should be escaped
 // \ ^ $ * + ? . ( ) | { } [ ]
 // These characters only have special meaning inside of brackets
 // they do not need to be escaped, but they MAY be escaped
 // without any adverse effects (to the best of my knowledge and casual testing)
 // : ! , = 
 // my test "~!@#$%^&*(){}[]`/=?+\|-_;:'\",<.>".match(/[\#]/g)

 var specials = [
 // order matters for these
 "-"
 , "["
 , "]"
 // order doesn't matter for any of these
 , "/"
 , "{"
 , "}"
 , "("
 , ")"
 , "*"
 , "+"
 , "?"
 , "."
 , "\\"
 , "^"
 , "$"
 , "|"
 ]

 // I choose to escape every character with '\'
 // even though only some strictly require it when inside of []
 , regex = RegExp('[' + specials.join('\\') + ']', 'g')
 ;

 escapeRegExp = function (str) {
 return str.replace(regex, "\\$&");
 };

 // test escapeRegExp("/path/to/res?search=this.that")
 }());