字符串到正则表达式

时间:2015-05-14 08:37:48

标签: javascript regex

我从服务器获取正则表达式字符串。例如

js_pattern = "/^9\d+$/"

我需要从这个字符串得到相同的正则表达式(没有任何修改)

js_regexp = /^9\d+$/

re = new RegExp(js_pattern)对我不起作用,因为在这种情况下我得到/\/^9d+$\//

在JavaScript中将字符串转换为正则表达式是否有正确的变体?

3 个答案:

答案 0 :(得分:1)

尝试:

re = new RegExp(js_pattern.slice(1,-1))

<强>更新

满足限制没有任何修改,这是一种方式,也许不是最好的方式:

eval(js_pattern)

但是,因为&#39; \&#39;是JavaScript中的转义字符,您应该替换&#39; \&#39;用&#39; \\&#39;在服务器端。

<强> UDDATE:

如果您收到的字符串为&#34; / ^ 9 \ d + $ /&#34;,则您无需在服务器端执行任何操作。

答案 1 :(得分:1)

任何非特殊字符都会被评估为字符串中的该字符

例如

// true, because it's non-special so it gets evaluated to that character.
console.log("\a" === "a"); // true

// false, because it's the new line special character.
console.log("\n" === "n"); // false

JavaScript special characters

解决方案:

在发送之前逃离服务器上的反斜杠。

答案 2 :(得分:0)

这实际上取决于您的服务器端代码,但实质上您的问题是,\d在字符串中被评估为转义字符。我的解决方案特定于PHP,但其他服务器端语言也应该类似。

// drop the enclosing slashes, either here or in JS land
$jsPattern = addslashes("^9\d+$");
// $jsPattern => "^9\\d+$"

现在在JS方面,你可以使用它:

var js_exp = new RegExp(js_pattern);

最简单的选择就是删除封闭的斜线,如果可以的话,自己添加一个额外的转义斜杠。