JavaScript拥有强大的基于正则表达式进行模式匹配的能力。
正则表达式中字符分为普通字符和元字符。元字符是指那些在模式的某些上下文中具有特殊意义的字符,下面列出了模式元字符:
\ | ( ) [ ] { } ^ $ * + ? .
元字符如果想要匹配自身的话,必须在字符前面添加一个反斜杠进行转义。
句点可以匹配任何字符,换行符除外。如/snow./可以匹配"snowy"、"snowe"、"snowd"等。要匹配字符串中的一个句点,需要在模式中的句点前加一个反斜杠。例如/3\.4/只能匹配3.4。
可以把一组字符(即一个字符类)放到方括号中来匹配它们中的任意一个。例如[abc]可以匹配"a"、"b"、"c"当中的任何一个。同样,也可以定义如下字符类,它能够匹配"a"到"h"之间的所有小写字母:[a-h]。如果一个字符类中的第一个字符是抑扬符号^,其含义为反转指定的字符集。例如下面的字符类可以匹配除"a"、"e"、"i"、"o"、"u"以外的所有字母:[^aeiou]。
由于经常使用字符类,因此javascript预定义了一些字符类,可以通过名称加以引用:
名称 | 等价模式 | 匹配的内容 |
\d | [0-9] | 数字 |
\D | [^0-9] | 一个非数字 |
\w | [a-zA-Z_0-9] | 一个单词字符 |
\W | [^a-zA-Z_0-9] | 一个非单词字符 |
\s | [\r\t\n\f] | 一个空白字符 |
\S | [^\r\t\n\f] | 一个非空白字符 |
很多情况下,需要对模式的某一个部分进行重复。为了重复一个模式,需要加一个数字限定符,该数字限定符位于花括号之中。例如下面的模式能够匹配xyyyyz:/xy{4}z/。
除数字限定符外,还有三种符号限定符,分别是*、+、?,*表示0次或多次重复;?表示0次或1次重复;+表示1次或多次重复。
此外也经常使用另一个命名模式,\b。它能够匹配一个单词字符(\w)和非单词字符(\W)之间(这两者没有顺序之分)的边界位置。
可以通过锚在模式中指定字符串的位置。通过将锚^放到模式之前,就可以指定该模式只匹配字符串的开头。在模式后加一个$可以将该模式指定为只匹配字符串的末尾部分。例如/^pearl/可以匹配"pearls are pretty",而无法匹配"My pearls are pretty"。/gold$/可以匹配"I like gold"而无法匹配"golden"。
锚字符类似于边界命名模式,它们不匹配字符串中的某个字符,只匹配字符之前、之后、之间的位置。如果锚字符^不出现在模式的开头或字符类的开头,它就没有特殊含义(匹配自身)。同样,如果$不出现在模式的结尾,那它也没有特殊含义。
模式修饰符可以加到模式之后,用于修改模式的应用方式。例如修饰符i可以使模式中的字母既可以匹配字符串中的小写字母,又可以匹配大写字母。如/Apple/i可以匹配"APPLE"、"apple"、"APPle"等。