reg = /[^abc]/;
str='cainiao';
execReg(reg,str);
则返回i,前两个字符都是[abc]集合中的。
由此我们可知:[^0-9]表示非数字,[^a-z]表示非小写字母,一次类推。
边界与非边界
\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数。例如/\bc/就表示字符串开始的c或者是结尾的c。看下面的例子:
复制代码 代码如下:
reg = /\bc/;
str='cainiao';
execReg(reg,str);
返回结果c。匹配到了左边界的c字符。
复制代码 代码如下:
reg = /\bc/;
str='维生素c';
execReg(reg,str);
仍然返回c,不过这次返回的是右侧边界的c。
复制代码 代码如下:
reg = /\bc/;
str='bcb';
execReg(reg,str);
这次匹配失败,因为bcb字符串中的c被夹在中间,既不在左边界也不再右边界。
与\b对应\B表示非边界。例如:
复制代码 代码如下:
reg = /\Bc/;
str='bcb';
execReg(reg,str);
这次会成功地匹配到bcb中的c,。然而
复制代码 代码如下:
reg = /\Bc/;
str='cainiao';
execReg(reg,str);
则会返回null。因为\B告诉正则,只匹配非边界的c。
数字与非数字
\d表示数字的意思,相反,\D表示非数字。例如:
复制代码 代码如下:
reg = /\d/;
str='cainiao8';
execReg(reg,str);
返回的匹配结果为8,因为它是第一个数字字符。
复制代码 代码如下:
reg = /\D/;
str='cainiao8';
execReg(reg,str);
返回c,第一个非数字字符。
空白
\f匹配换页符,\n匹配换行符,\r匹配回车,\t匹配制表符,\v匹配垂直制表符。
\s匹配单个空格,等同于[\f\n\r\t\v]。例如:
复制代码 代码如下:
reg = /\s.+/;
str='This is a test String.';
execReg(reg,str);
返回“is a test String.”,正则的意思是匹配第一个空格以及其后的所有非换行字符。
同样,\S表示非空格字符。
复制代码 代码如下:
reg = /\S+/;
str='This is a test String.';
execReg(reg,str);
匹配结果为This,当遇到第一个空格之后,正则就停止匹配了。
单词字符
\w表示单词字符,等同于字符集合[a-zA-Z0-9_]。例如:
复制代码 代码如下:
reg = /\w+/;
str='blueidea';
execReg(reg,str);
返回完整的blueidea字符串,因为所有字符都是单词字符。
复制代码 代码如下:
reg = /\w+/;
str='.className';
execReg(reg,str);
结果显示匹配了字符串中的className,只有第一个“.”——唯一的非单词字符没有匹配。
复制代码 代码如下:
reg = /\w+/;
str='中文如何?';
execReg(reg,str);
试图用单词字符去匹配中文自然行不通了,返回null。
\W表示非单词字符,等效于[^a-zA-Z0-9_]
复制代码 代码如下:
reg = /\W+/;
str='中文如何?';
execReg(reg,str);
返回完整的字符串,因为,无论是中文和“?”都算作是非单词字符。
反向引用
形式如下:/(子正则表达式)\1/
依旧用例子来说明:
1.
复制代码 代码如下:
reg = /\w/;
str='blueidea';
execReg(reg,str);
返回b。
2.
复制代码 代码如下:
reg = /(\w)(\w)/;
str='blueidea';
execReg(reg,str);
返回bl,b,l
bl是整个正则匹配的内容,b是第一个括号里的子正则表达式匹配的内容,l是第二个括号匹配的内容。
3.
复制代码 代码如下:
reg = /(\w)\1/;
str='blueidea';
execReg(reg,str);
则会返回null。这里的“\1”就叫做反向引用,它表示的是第一个括号内的字正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)匹配了b,因此“\1”就同样表示b了,在余下的字符串里自然找不到b了。
与第二个例子对比就可以发现,“\1”是等同于“第1个括号匹配的内容”,而不是“第一个括号的内容”。
复制代码 代码如下: