字符集

我们也可调用indexOf来找出字符串中是否包含abc。正则表达式允许我们表达一些更复杂的模式。

假如我们想匹配任意数字。在正则表达式中,我们可以将一组字符放在两个方括号之间,该表达式可以匹配方括号中的任意字符。

下面两个表达式都可以匹配包含数字的字符串。

  1. console.log(/[0123456789]/.test("in 1992"));
  2. // → true
  3. console.log(/[0-9]/.test("in 1992"));
  4. // → true

我们可以在方括号中的两个字符间插入连字符(),来指定一个字符范围,范围内的字符顺序由字符 Unicode 代码决定。在 Unicode 字符顺序中,0 到 9 是从左到右彼此相邻的(代码从48到57),因此[0-9]覆盖了这一范围内的所有字符,也就是说可以匹配任意数字。

许多常见字符组都有自己的内置简写。 数字就是其中之一:\ d[0-9]表示相同的东西。

  • \d任意数字符号

  • \w字母和数字符号(单词符号)

  • \s任意空白符号(空格,制表符,换行符等类似符号)

  • \D非数字符号

  • \W非字母和数字符号

  • \S非空白符号

  • .除了换行符以外的任意符号

因此你可以使用下面的表达式匹配类似于30-01-2003 15:20这样的日期数字格式:

  1. let dateTime = /\d\d-\d\d-\d\d\d\d \d\d:\d\d/;
  2. console.log(dateTime.test("30-01-2003 15:20"));
  3. // → true
  4. console.log(dateTime.test("30-jan-2003 15:20"));
  5. // → false

这个表达式看起来是不是非常糟糕?该表达式中一半都是反斜杠,影响读者的理解,使得读者难以揣摩表达式实际想要表达的模式。稍后我们会看到一个稍加改进的版本。

我们也可以将这些反斜杠代码用在方括号中。例如,[\d.]匹配任意数字或一个句号。但是方括号中的句号会失去其特殊含义。其他特殊字符也是如此,比如+

你可以在左方括号后添加脱字符(^)来排除某个字符集,即表示不匹配这组字符中的任何字符。

  1. let notBinary = /[^01]/;
  2. console.log(notBinary.test("1100100010100110"));
  3. // → false
  4. console.log(notBinary.test("1100100010200110"));
  5. // → true