我從服務器獲得正則表達式字符串。例如正則表達式的字符串
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' –