2012-08-15 65 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}$');