当用单引号括起来时,正则表达式不起作用

时间:2012-08-15 10:59:30

标签: javascript regex

我需要在引号中包含一个正则表达式,以便我可以在其中添加另一个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或输入字段的默认值。

2 个答案:

答案 0 :(得分:6)

在字符串文字中,您需要转义所有反斜杠。例如,'\d'实际上只是字符串'd',因为Javascript解析器将反斜杠作为字符串转义序列的开头。 RegExp()构造函数需要字符串中的实际反斜杠,因此您必须转义它们:

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

如果您尝试放入字符串的默认值包含任何特殊字符,则还必须将它们转义。可以在element.defaultValue中转义它们,也可以使用this question中的答案。

答案 1 :(得分:0)

你需要转义斜杠,但转义反斜杠:

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