如何将字符串编码的PHP正则表达式转换为JS正则表达式?

I have a very simple regex that I am using for highlighting search terms in my application. If a user types in 'stack' into the search form, for example, the following regular expression is used as a string argument for preg_match_all to highlight the results:

"/\b((stack|stacks))\b/i"

I am using json_encode to output some of my configuration options for my application, including the regex above. I need this regex on the client-side because I am lazy-loading pagination items in an infinite-scroll fashion, and I want to take advantage of the client-side to parse the HTML for the proper search term highlighting.

My JS configuration object now appears similar to:

config = {
   searchRegex: "/\b((stack|stacks))\b/i",
   // ... more options
}

If searchRegex wasn't a string, I wouldn't have a problem. It would automatically be a regular expression object, and there is nothing in that regex that JavaScript doesn't support. But now, I have to resort to parsing the string to get the appropriate arguments for the RegExp constructor, which involves removing the delimiters and getting the modifier(s). With all the escaped characters that could be present, this doesn't seem like a viable or sane option.

How would I convert searchRegex to become a regular expression object?

Thanks for your answers. I decided to output the regex-based string sans modifiers and delimiters to the client and use JS to pass it and the separated modifier to the RegExp constructor. Ended up with something similar to:

config = {
    searchRegex: '\b((stack|stacks))\b',
    modifiers: 'i'
}

// ... later
model.initialize = function () {
    config.searchRegex = new RegExp(config.searchRegex, config.modifiers || '');
};

Use unescape()

http://www.w3schools.com/jsref/jsref_unescape.asp

var str="Need tips? Visit W3Schools!";
var str_esc=escape(str);
document.write(str_esc + "<br>")
document.write(unescape(str_esc))

A really hacky way to do this is to eval it. If you can trust the inputs, it might be an okay solution.

function evalRegExp(str) {
  return eval(str);
}

var re = evalRegExp("/foo/i");
// => /foo/i

If you use this a lot, it might be okay to add this as a method directly to RegExp

RegExp.eval = function(str) {
  return eval(str);
};

var re = RegExp.eval("/foo/i");
// => /foo/i

Maybe not the best parse but i've got it working parsed as an array [regexp, modifiers] ready to create a new instance of RegExp. Hope it helps...

'/some[a-z]+regex/i'.replace(/^(.)(.+)\1([gim])+/, function (foo, bar, regexp, modifiers) { return [regexp, modifiers].join('___') }).split('___')