字符集
我们也可调用indexOf
来找出字符串中是否包含abc
。正则表达式允许我们表达一些更复杂的模式。
假如我们想匹配任意数字。在正则表达式中,我们可以将一组字符放在两个方括号之间,该表达式可以匹配方括号中的任意字符。
下面两个表达式都可以匹配包含数字的字符串。
console.log(/[0123456789]/.test("in 1992"));
// → true
console.log(/[0-9]/.test("in 1992"));
// → true
我们可以在方括号中的两个字符间插入连字符(–
),来指定一个字符范围,范围内的字符顺序由字符 Unicode 代码决定。在 Unicode 字符顺序中,0 到 9 是从左到右彼此相邻的(代码从48到57),因此[0-9]
覆盖了这一范围内的所有字符,也就是说可以匹配任意数字。
许多常见字符组都有自己的内置简写。 数字就是其中之一:\ d
与[0-9]
表示相同的东西。
\d
任意数字符号\w
字母和数字符号(单词符号)\s
任意空白符号(空格,制表符,换行符等类似符号)\D
非数字符号\W
非字母和数字符号\S
非空白符号.
除了换行符以外的任意符号
因此你可以使用下面的表达式匹配类似于30-01-2003 15:20
这样的日期数字格式:
let dateTime = /\d\d-\d\d-\d\d\d\d \d\d:\d\d/;
console.log(dateTime.test("30-01-2003 15:20"));
// → true
console.log(dateTime.test("30-jan-2003 15:20"));
// → false
这个表达式看起来是不是非常糟糕?该表达式中一半都是反斜杠,影响读者的理解,使得读者难以揣摩表达式实际想要表达的模式。稍后我们会看到一个稍加改进的版本。
我们也可以将这些反斜杠代码用在方括号中。例如,[\d.]
匹配任意数字或一个句号。但是方括号中的句号会失去其特殊含义。其他特殊字符也是如此,比如+
。
你可以在左方括号后添加脱字符(^
)来排除某个字符集,即表示不匹配这组字符中的任何字符。
let notBinary = /[^01]/;
console.log(notBinary.test("1100100010100110"));
// → false
console.log(notBinary.test("1100100010200110"));
// → true