\w任何单词;与[a-zA-Z0-9]相似
\W不与任何字符和数字匹配与[^a-zA-Z0-9]相等
\s任何空白字符
\S任何非空白的字符
\d任何数字[0-9]
\D除了数字
[]匹配方括号内的任意字符
[^]除了方括号内的字符任意匹配
{n,m}匹配前一项最少n次最多m次
{n,}匹配前一项最少n次或多次
{n}匹配前一项n次
?匹配前一项0次或1次
+匹配前一项1次或多次
*匹配前一项0次或多次
^匹配字符串的开头
$匹配字符串结尾
\b匹配一个单词的得结尾
\B匹配单词边界位置
(?=表达式)零宽正向先行断言,要求接下来的字符都与表达式匹配
(?!表达式)零宽负向先行断言,要求接下来的字符都不与表达式匹配
正则表达式圆括号的作用:
1、把单独的项组合成子表达式;
例子:reg=/java(script)?/
script字符串可以有也可以没有
2、在完整的模式中定义子模式
例子: reg=/java(scr(ipt)?)+/
script字符串必须出现一次
但是scr字符必须出现一次,
里面的ipt字符可以不用出现,因为ipt是一组;
3、允许同一正则表达式的后部引用前面的子表达式
()用来创建一个分组,可以被\n的形式引用
(?: )也是创建一个分组,但是这个分组不能被\n这样的引用
例子:reg=/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/
我们在正则中可以通过\n这种形式引用()创建的分组,
但是我们也可以创建分组但是不可以被引用
正则表达式的选择、分组和引用字符
| 选择,匹配该符号左边的子表达式或者是右边的表达式
() 组合将几个项何为一个单元
(?:)只是组合不能被引用
\n 和第几个分组想匹配,你是一个数字,代表的是分组的索引
(?=)先行断言用以说明括号内的表达式必须正确匹配;
例子: reg=/[Jj]ava([Ss]cript)?(?=\:)/;
匹配到的字符串必须是以:结尾;
也就是字符串和表达式相同但是必须以:结尾
(?!)是负向先行断言,用以制定接下来的字符串都不匹配
例子:reg=/Java(?! Script)([A-Z]\W*)/;
Java后面必须跟着是一个大写的字符和1到多个的小写字符,
但是不能跟着Script字符串,JavaBeans是正确的,Javascript是错误的,
因为Java后面跟着的是小写的,只要是后面没有Script并且这个字符和正则
表达式的格式向符合他就是正确的
修饰符:
i:用以说明匹配不区分大小写
g:全局通配
m:用以多行匹配
正则表达式的方法:
1、search:
例子:'JavaScript'.search(/script/i)
结果:4
返回值:是第一个与他匹配的字符串的位置,如果没有找到就是他将返回-1
注意点:search不支持全局查找也就是g修饰符
2、match:
例子:'1 plus 2 equals 3'.match(/\d+/g)
返回值:是由匹配结果组成的数组
使用代码解析url
var url=/(\w+):\/\/([\w.]+)\/(\S*)/;
var text='Visit my blog at http://www.example.com/~david';
var result=text.match(url);
if(result != null){
var fullurl=result[0];
var protocol=result[1]
var host=result[2]
var path=result[3]
}
3、exec:
例子:
var pattern=/Java/g;
var text='JavaScript is more fun than Java!'
var result;
while((result=pattern.exec(text))!=null){
console.log('Matched : '+result[0]+' at position : '+
result.index+' next search begins at '+pattern.lastIndex)
}
返回值和match相同
4、test:
例子:/\d/.test('1')
返回值:true和false
RegExp(表达式,修饰符)构造函数带有俩个字符串参数;其中第二个参数是可选的
RegExp的属性:
source:是一个只读的字符串,包含正则表达式的文本
global:是一个只读的布尔值,用以说明是否带有修饰符g;
ignoreCase:是一个只读的布尔值,用以说明是否带有修饰符i;
multiline::是一个只读的布尔值,用以说明是否带有修饰符m;
laseIndex:可读写整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串下一次检索的位置