我从服务器获取正则表达式字符串。例如:
js_pattern = "/^9\d+$/"
我需要从这个字符串中获取相同的正则表达式(不做任何修改)
js_regexp = /^9\d+$/
re = new RegExp(js_pattern)
对我无效,因为在这种情况下我得到了 /\/^9d+$\//
有没有正确的变体将字符串转换为JavaScript中的正则表达式?
我从服务器获取正则表达式字符串。例如:
js_pattern = "/^9\d+$/"
我需要从这个字符串中获取相同的正则表达式(不做任何修改)
js_regexp = /^9\d+$/
re = new RegExp(js_pattern)
对我无效,因为在这种情况下我得到了 /\/^9d+$\//
有没有正确的变体将字符串转换为JavaScript中的正则表达式?
re = new RegExp(js_pattern.slice(1,-1))
更新:
为了满足限制不做任何修改,这里提供一种方法,也许不是最好的:
eval(js_pattern)
但是,由于在JavaScript中'\'是转义字符,所以你应该在服务器端用'\\'来代替'\'。
更新:
如果您已经收到字符串“/^9\d+$/”,则无需在服务器端进行任何操作。
\d
没有被保留。 - Kevin Nagurski例如:
// 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
解决方案:
在发送之前,需要在服务器上转义反斜杠。
这实际上取决于您的服务器端代码,但基本上您的问题是\d
被解释为转义字符。我的解决方案针对PHP,但其他服务器端语言应该也类似。
// drop the enclosing slashes, either here or in JS land
$jsPattern = addslashes("^9\d+$");
// $jsPattern => "^9\\d+$"
var js_exp = new RegExp(js_pattern);
d
还是\d
。 - Avinash Raj\d
在被赋值为字符串形式时就被解析了。你唯一的选择是从服务器端进行转义。 - Kevin Nagurski\d
是一个特殊情况,任何规则都可能来自服务器。似乎没有正确的方法来执行此操作,只能使用一些技巧。 - Dmitry Shurshilin