2015-05-14 128 views
4

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

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

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

js_regexp = /^9\d+$/ 

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

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

+1

从服务器得到的东西是怎样的? AJAX? –

+0

@KevinNagurski,是的,阿贾克斯。我为不同的表单域设置了一组规则。 –

+0

你不能假设它是'd'还是'\ d' –

回答

1

尝试:

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

UPDATE:

满足极限没有任何修改,这里是一个办法,也许不是最好的:

eval(js_pattern) 

但是,由于'\'是JavaScript中的转义字符,因此应在服务器端将'\'替换为'\\'。

UDDATE:

如果alread收到的字符串为 “/^9 \ d + $ /”,你不需要做任何事情在服务器端。

+3

看起来像'\ d'不会被保存。 –

+0

'test'和'exec'不适用于字符串 –

+0

不幸的是'\ d'不适用。 –

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

最简单的选择是只删除封闭斜线,并添加,如果你能额外削减逃逸自己。

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

解决方案:

逃生服务器上的反斜线你送过来了。