RegExp:为什么这个正则表达式不匹配“不能以两个字母开头”?

时间:2015-04-21 15:32:43

标签: javascript regex

我尝试匹配一个不是以“t”开头的单词

e.g。

/^[^t]est$/.test('test') # false

/^[^t]est$/.test('best') # true

但是当我尝试将长度设置为2时,它不起作用:

/^[^t]{2,2}st$/.test('ttst') # false

/^[^t]{2,2}st$/.test('tbst') # false (should be true)

/^[^t]{2,2}st$/.test('bbst') # true

tbst只包含一个t,因此不应该匹配

谁能解释为什么?感谢

4 个答案:

答案 0 :(得分:1)

RegEx的工作原理如下:

/^[^t]{2,2}st$/
  • ^断言字符串开头的位置
  • [^ t] {2,2}匹配下面列表中不存在的单个字符 量词:{2,2}恰好2次
  • t字面字符t(区分大小写)
  • st匹配字符字符(区分大小写)
  • $断言字符串末尾的位置

您也不需要{2,2},因为这是一个范围,您可以为2场比赛做{2},或者为1到2场比赛做{1,2}。

REGEX101

此示例应该可以很好地说明该RegEx中发生的事情。

如果您正在寻找以下解决方案:匹配任何不以tt开头的单词(区分大小写),您可以使用以下内容:

/^(?!tt)\w+$/

PROOF

希望这有帮助。

答案 1 :(得分:1)

 ^[t][t]

^断言字符串开头的位置

[t]匹配下面列表中的单个字符

字面字符t(区分大小写)

[t]匹配下面列表中的单个字符

字面字符t(区分大小写)

答案 2 :(得分:0)

/^[^t]{2,2}st$/.test('tbst') # false (should be true)

不,它不应该。 [^t]{2,2}[^t][^t]的说法相同:两个原子都匹配任何字符但是" t"。

答案 3 :(得分:0)

正则表达式/^[^t]{2,2}st$/要求前两个字符不是t。由于第一个字符为t,因此与字符串tbst不匹配。