我从服务器获取正则表达式字符串。例如
js_pattern = "/^9\d+$/"
我需要从这个字符串得到相同的正则表达式(没有任何修改)
js_regexp = /^9\d+$/
re = new RegExp(js_pattern)
对我不起作用,因为在这种情况下我得到/\/^9d+$\//
在JavaScript中将字符串转换为正则表达式是否有正确的变体?
答案 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
解决方案:
在发送之前逃离服务器上的反斜杠。
答案 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);
最简单的选择就是删除封闭的斜线,如果可以的话,自己添加一个额外的转义斜杠。