2012-08-15 68 views
0

我需要用引號包裝正則表達式,以便我可以添加另一個JavaScript變量,但是這會阻止它正常工作。包裹在單引號中的正則表達式不工作

這裏的工作示例...

var re = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/); 

而我最終想實現看起來是這樣的(但修改,使其工作):

var re = new RegExp('^'+element.defaultValue+'|(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$'); 

這樣一個日期格式化的DD/MM/YYYY或輸入欄的默認值。

+1

你的代碼的第一部分是不完全正確的BTW。您應該將一個字符串傳遞給'RegExp',而不是正則表達式。你的代碼等同於'var re = /^...$/'。 – 2012-08-15 11:17:00

回答

6

在字符串文字中,您需要轉義所有反斜槓。例如'\d'實際上只是字符串'd',因爲Javascript解析器將反斜槓作爲字符串轉義序列的開始。該RegExp()構造函數需要在字符串中的實際反斜槓,所以你必須轉義:

`'|(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$'` 

如果你想投入到字符串的默認值中包含任何特殊字符,還必須對其進行轉義。要麼在element.defaultValue中逃脫它們,要麼使用this question的答案。

0

您需要逃避斜線,但轉義反斜線:

new RegExp('^'+element.defaultValue+'|(0?[1-9]|[12][0-9]|3[01])[/\\-](0?[1-9]|1[012])[/\\-]\\d{4}$');