实际工作中最常用的都是一些简单的正则表达式,form验证里的邮件、中文、网址、电话等的匹配,开发中的注释匹配,这些都还好,偶尔错了多试几次就可以搞定了。
但是以下部分很少用到,今天看《javascript权威指南(第五版)》才详细了解了,算是正则表达式的进阶知识了。
[b]正则表达式的锚字符[/b](锚其实就是定位的意思,这个我在刚学html的时候一直没弄明白 :D )
[list]
[*]^ 匹配字符串的开头,在多行模式中匹配一行的开头
[*]$ 匹配字符串的结尾,在多行模式中匹配一行的结尾
[*]\b 匹配一个词语的边界,词语边界即是\w和\W之间的位置,或\w和字符串的开头和结尾的位置
[*]\B 匹配非词语边界的位置。这个跟上面相反,即是\W和\W之间,\w和\w之间的位置这两种情形
[*](?=[i]p[/i]) 正前向声明,要求接下来的字符都与模式p匹配,但是不包括匹配中的那些字符
[*](?![i]p[/i]) 反前向声明,要求接下来的字符[color=red]不[/color]与模式p匹配,
[/list]
[b]正则表达式的标志[/b](这个其实是高级匹配了)
[list]
[*]i 执行不区分大小写的匹配
[*]g 执行一个全局匹配,即找到所有匹配的字符串
[*]m 多行模式,^匹配一行的开头和字符串的开头,$匹配一行的结尾和字符串的结尾
[/list]
----未完待续
但是以下部分很少用到,今天看《javascript权威指南(第五版)》才详细了解了,算是正则表达式的进阶知识了。
[b]正则表达式的锚字符[/b](锚其实就是定位的意思,这个我在刚学html的时候一直没弄明白 :D )
[list]
[*]^ 匹配字符串的开头,在多行模式中匹配一行的开头
[*]$ 匹配字符串的结尾,在多行模式中匹配一行的结尾
[*]\b 匹配一个词语的边界,词语边界即是\w和\W之间的位置,或\w和字符串的开头和结尾的位置
[*]\B 匹配非词语边界的位置。这个跟上面相反,即是\W和\W之间,\w和\w之间的位置这两种情形
[*](?=[i]p[/i]) 正前向声明,要求接下来的字符都与模式p匹配,但是不包括匹配中的那些字符
[*](?![i]p[/i]) 反前向声明,要求接下来的字符[color=red]不[/color]与模式p匹配,
[/list]
/\bhello/.test("ahello world");//false
/\bhello/.test("hello world");//true
/hello\b/.test(" hello world");//true
/hello\b/.test("hello@ world");//true @是非单词字符,所以o和@之间即是边界,也就是\b
/hello\b/.test("hello_ world");//false,该正则表达式要求hello之后有一个非单词字符(0-9,a-z,A~Z和_),但"hello_ world"中_是单词字符,所以返回false
/hello\B/.test(" hello_world");//true \B的含义与\b相反,参考上面解释,o和_之间为非词语边界
/hello\B/.test(" helloworld");//true,参考上面解释,o和w之间为非词语边界,\w和\w之间的位置
/hello\B/.test(" helloworld");//true,参考上面解释,\W和\W之间
/@\B/.test("@#");//true \W \W
[b]正则表达式的标志[/b](这个其实是高级匹配了)
[list]
[*]i 执行不区分大小写的匹配
[*]g 执行一个全局匹配,即找到所有匹配的字符串
[*]m 多行模式,^匹配一行的开头和字符串的开头,$匹配一行的结尾和字符串的结尾
[/list]
"javaScript is a script language".replace(/script/ig,"")//"java is a language"
"javaScript is a script language".replace(/script/g,"")//javaScript is a language"
"javaScript is a script language".replace(/script/i,"")//java is a script language"
----未完待续