JavaScript学习笔记-正则表达式(语法篇)

正则表达式的模式规则是由一个字符系列组成的,包括所有字母和数字在内;
大多数的字符(所有字母和数字)都是按字符的直接量来描述带匹配的字符;
一些具有特殊语义的字符按照其特殊语义来进行匹配,有些字符需要通过(\)进行转义;
字符 匹配
字母,数字 自身
\o NUL字符\u0000
\t 制表符\u0009
\n 换行符\u000A
\v 垂直制表符\u000B
\f 换页符\u000C
\r 回车符\u000D
\Xnn \xnn 由十六进制数nn指定的拉丁字符,如\x0A等价于\n
\uxxxx 由十六进制数xxxx指定的Unicode字符,如\u000A等价于\n
\cX 控制字符^X,如\cJ等价于\n
正则表达式中具有特殊含义的标点符号:(某些符号只有在正则表达式的某些上下文中才具有某种特殊含义)
^ $ . * + ? = ! : | \ / ( ) [ ] { } 还有连字符'-'
若要将以上特殊符号按直接量进行匹配,则必须使用前缀\来转义,其它符号则无需转义直接按字面量匹配;
JavaScript学习笔记-正则表达式(语法篇)
 
正则表达式的重复字符语法:
JavaScript学习笔记-正则表达式(语法篇)
 
以上是贪婪式匹配(尽可能多的匹配),若要进行非贪婪匹配(若可以则尽可能少的匹配)只需在后面加个'?',如:??,+?,*?,{1,5}?,{1,}?,在它们后面加'?'表示若可以则取下限值,不可以的情况如/a+?b/匹配aaaab时结果是aaaab而不是ab,因为正则表达式总是会从第一个字符开始匹配的,所以他无法跳过前面的aaa
选择项如/ab|cd|abcd/匹配ab或cd或abcd,尝试匹配是从左到右,直到发现匹配项,就忽略其他选项;
圆括号的作用1:把单独的项组合成子表达式,如/(ab|cd)+|ef/,可以匹配ef,也可以匹配ab或cd的多次重复
圆括号的作用2:在完整的模式中定义子模式,当成功匹配完整模式时,可以从目标中抽出和子模式相匹配的部分,如/[a-z]+(\d+)/,匹配一个或多个小写字母后面跟一位或多位数字,匹配成功则抽取数字部分;
圆括号的作用3:允许在同一个表达式的后部引用前面的子表达式所匹配的字符串(引用:通过在\后面加一位或多位数字来指定第几个左括号),如/([Jj]ava([Ss]crip)?) \sis\s(fun\w*)/,\2表示引用与第三个左括号内的子表达式([Ss]crip)相匹配的字符串;/(['"])[^'"]*\1/表示匹配位于单引号对或双引号对之间的0个或多个字符;
正则表达式中不允许单引号和双引号之间的相互嵌套,如/(['"])[^\1]*\1/这是错误的,中间的\1被嵌套了
JavaScript学习笔记-正则表达式(语法篇)
 
 
指定匹配位置:锚
JavaScript学习笔记-正则表达式(语法篇)
 
如:
/\bJava\b/以边界来匹配单词Java,
匹配单词JavaScript可以用/^JavaScript$/,
/\B[Ss]cript/与JavaScript和postscript匹配,不匹配script和Scripter,
/[Jj]ava ([Ss]cript)?(?=\:)/只匹配后面带冒号的,匹配JavaScript:The中的JavaScript,不匹配JavaScript The,
/Java(?!Script)([A-Z]\w*)/可以匹配Java后跟一个大写字母和任意多个ASC2字符,但Java后面不能跟Script
 
修饰符:用以说明高级匹配模式的规则,修饰符放在正则表达式/../之后,可以任意组合,如/java/ig表示匹配不区分大小写且在全文中匹配所有
JavaScript学习笔记-正则表达式(语法篇)
上一篇:《Effective C++》第2章 构造/析构/赋值运算(1)-读书笔记


下一篇:Effective C++ —— 构造/析构/赋值运算(二)