我从服务器获得正则表达式字符串。例如正则表达式的字符串
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))
UPDATE:
满足极限没有任何修改,这里是一个办法,也许不是最好的:
eval(js_pattern)
但是,由于'\'是JavaScript中的转义字符,因此应在服务器端将'\'替换为'\\'。
UDDATE:
如果alread收到的字符串为 “/^9 \ d + $ /”,你不需要做任何事情在服务器端。
看起来像'\ d'不会被保存。 –
'test'和'exec'不适用于字符串 –
不幸的是'\ d'不适用。 –
这实际上取决于您的服务器端代码,但实质上您的问题是\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);
最简单的选择是只删除封闭斜线,并添加,如果你能额外削减逃逸自己。
任何非特殊字符被评估为字符串中的那个字符。
例如
// 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
解决方案:
逃生服务器上的反斜线你送过来了。
从服务器得到的东西是怎样的? AJAX? –
@KevinNagurski,是的,阿贾克斯。我为不同的表单域设置了一组规则。 –
你不能假设它是'd'还是'\ d' –