匹配特定范围内的单个正则表达式字符

时间:2018-12-06 17:35:31

标签: javascript regex

似乎很简单,但是我找不到如何执行此操作。我想在一个特定范围内匹配一个字符,例如a到z。

  

[a-z]

当前正在执行以下操作:

const regex = RegExp('[a-z]');
console.warn('TEST', regex.test('a'))

足够简单。但是我希望它是单个字符。如果不止一个,则无论它们是否也属于该范围,都需要失败。 例如:

  • a应该通过
  • b应该通过
  • ab应该失败
  • aa应该失败
  • abcdefg应该失败

您明白了。

我尝试了一些变体,例如L

  

[{1} a-z]

什么都不做。最终,它仍然接受该范围内的任何字符组合。

1 个答案:

答案 0 :(得分:6)

使用^$向下固定字符串,这两个字符串分别与“字符串的开始”和“字符串的结束”匹配。

您的正则表达式为^[a-z]$,这意味着您希望在az之间匹配单个字符,并且该单个字符必须是要匹配的整个字符串。

[a-z]{1}(相当于[a-z])不起作用的原因是,您可以在字符串中始终匹配单个字符。字符串的开头/结尾不会“固定”。

let str = ['a','b','ab','aa','abcdefg'];
const regex = /^[a-z]$/;
str.forEach(w => console.warn(w, regex.test(w)));

顺便说一句,[{1}a-z]并没有达到您的预期。您打算匹配一个字母字符,但这会在匹配列表中再添加三个字符,即:

  • a-z
  • {
  • }
  • 1

我认为您的意思是[a-z]{1},如前所述,它等同于[a-z]