字符串转正则表达式

4

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

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

我需要从这个字符串中获取相同的正则表达式(不做任何修改)

js_regexp = /^9\d+$/

re = new RegExp(js_pattern) 对我无效,因为在这种情况下我得到了 /\/^9d+$\//

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


1
从服务器获取的东西是通过什么方式实现的?是使用 AJAX 吗? - Kevin Nagurski
@KevinNagurski,是的,使用ajax。我会为不同的表单字段设置一组规则。 - Dmitry Shurshilin
你不能假设它是 d 还是 \d - Avinash Raj
2
问题在于\d在被赋值为字符串形式时就被解析了。你唯一的选择是从服务器端进行转义。 - Kevin Nagurski
我无法在服务器端修改此规则(后端特定性),我必须使用这些规则进行验证,但我还没有找到任何正确的变体来执行此操作。而 \d 是一个特殊情况,任何规则都可能来自服务器。似乎没有正确的方法来执行此操作,只能使用一些技巧。 - Dmitry Shurshilin
3个回答

1
尝试:

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

更新:

为了满足限制不做任何修改,这里提供一种方法,也许不是最好的:

eval(js_pattern)

但是,由于在JavaScript中'\'是转义字符,所以你应该在服务器端用'\\'来代替'\'。

更新:

如果您已经收到字符串“/^9\d+$/”,则无需在服务器端进行任何操作。


3
看起来\d没有被保留。 - Kevin Nagurski
“test”和“exec”不适用于字符串。 - Kevin Nagurski

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特殊字符

解决方案:

在发送之前,需要在服务器上转义反斜杠。


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

最简单的方法就是删除包围斜杠并自己添加一个额外的转义斜杠,如果可以的话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接