重复相同的字符时,正则表达式失败

时间:2016-02-22 06:31:53

标签: javascript regex string

我试图执行以下代码:

var pwd = "CURRENT DATE - 23 DAYS";
var Exp = /^([CURRENT]{7}[ ]{1}[DATE]{4}[ ]{1}[-]{1}[ ]{1}[\d]+[ ]{1}[DAYS]{4})$/i;
var Exp2 = /^([CURRENT]{7}[ ]{1}[DATE]{4}[ ]{1}[-]{1}[ ]{1}[\d]+[ ]{1}[MONTHS]{6})$/i;

if (pwd.match(Exp) || pwd.match(Exp2)) {
    alert("SUCCESS");
} else {
    alert("ERROR");
}

它按预期工作......但是虽然我已经给出了第一个单词CURRENT并提到了7个字符,但如果我给出错误的单词CUUUENT而不是CURRENT,它会接受。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

子表达式[CURRENT]{7}表示重复设置[CURRENT]中的任何字母七次。我认为你打算打算匹配字符串CURRENT。那只是CURRENT

你的许多正则表达式都指定了相同的东西。 /^CURRENT DATE - [0-9]+ (DAYS|MONTHS)$/应该与您拥有的相匹配。

答案 1 :(得分:2)

使用[CURRENT]{7}匹配[]中的每个字符,以及其中的7个字符。如果您想匹配整个单词,请使用(CURRENT)

(CURRENT DATE - \d{1} DAYS)

会更好

请注意,当你写完整个单词时,它与写入时的kt完全匹配。但是[THIS]{4}会抓取[]之间ITHSHHHT之间的4个字母的任意组合。