字符类
假设我们要在字符串中查找一个数字。不是指定的数字,而是任意数字,比如:在"Only 1"中查找"1",在"Give me a 5"中查找"5"。
子串匹配可以在循环中用来查找0-9中的所有数字。但是采用正则式可以更优雅地处理这种情况。
正则式可以利用字符类代替具体的字符。
例如,正则式中用"\d"来表示任意数字。下面例子中匹配了一个数字:
1 showMatch( "I‘m 5 years old", /\d/ ) // 5
最常用的字符类有:
\d:0-9中的任意数字;
\s:空白字符,如tab缩进,换行符等;
\w:拉丁字母,数字或者下划线;
一个正则式可能把字符类和普通标记包含在一起:
1 showMatch( "I‘m the 1st one", /\dst/ ) // matches ‘1st‘
下面代码的正则式中包含几个字符类一起:
1 showMatch( "I‘m 1 year old", /\d\s\w\w\w\w/ ) // 1 year
这里还有一些反义的字符类:
\D:非数字;
\S:非空白字符;
\W:非拉丁字母,数字或者下划线;
例如,查找第一个非字母字符:
1 showMatch( "I‘m 1 year old", /\W/ ) // matches apostrophe ‘
正则式还可以包含不可打印的字符串字符:\n(换行符), \t(制表符)等。这些很明显只是字符,而不是字符类。
空格非常重要!
通常情况下,我们不怎么在意空格。"1-5"和"1 - 5"看起来没什么两样。
但是在正则式中,空格和其他标识是一样的。
下面的正则式无法正确运行,因为没有包含空格标识符:
1 showMatch( "1 - 5", /\d-\d/ ) // no matches!
让我们来修改一下。我们可以把空格标识放在正则式中,或者最好把空格包含进去:
1 showMatch( "1 - 5", /\d - \d/ ) // works 2 showMatch( "1 - 5", /\d\s-\s\d/ ) // also works 3 showMatch( "1-5", /\d - \d/ ) // fails! (no spaces in string)
最后一个匹配失败,因为例子中没有空格。所以不要把多余的空格放在正则式中,它们都是有意义的。
在正则式中,点".
"表示除换行符以外的任意字符:
1 showMatch( "A char", /ch.r/ ) // "char" 2 showMatch( "A ch-r", /ch.r/ ) // "ch-r" 3 showMatch( "A ch r", /ch.r/ ) // "ch r", the space is also a char
虽然点".
"可以表示所有字符,但是必须要有字符:
1 showMatch( "A chr", /ch.r/ ) // not found
时间: 2024-10-09 19:50:37