2015-05-14 179 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

解決方案:

逃生服務器上的反斜線你送過來了。