正则表达式


^ 和 $ 代表可视首尾

正则表达式不允许在双引号中包括单引号,反之亦然

特殊符号:^$.*+?=!:\/(){}[]

直接量字符:\o,\t,\n,\v,\f,\r,\Xnn,\uxxxx,\cX

字符类:直接量字符放进方括号,匹配括号中包含的任意字符
[\b],\w,\d,\s,[...],[^...]
ex:/[abc]/就和字符"a","b","c"任意一个都匹配
/^[abc]/,/[a-zA-Z0-9]/

重复:{n,m}匹配前一项至少n次,但不超过m次
? = {0,1},+ = {1,},* = {0,}
非贪婪重复(重复符号后面加?),尽可能匹配少的字符。
/a+?b/ 匹配 aab 时匹配整个字符串

单选择、子表达式、分组、引用子表达式:|,(),(?:),\数字
引用:/(['"])[^'"]*\1/, \1引用第一个子表达式的结果

指定位置的锚:^,$,(?=),\b,\B,(?!)
/^javascript$/:匹配单词javascript
/\bjavascript\b/:匹配单词本身\bASCII与非ASCII边界
(?=):零宽断言(需匹配括号内的内容用于断言,)
/[Jj]ava([Ss]cript)?(?=\:)/匹配后面有冒号的语言名
(?!)负向零宽断言,/Java(?!Script)([A-Z\w*])/不能匹配JavaScripter

修饰符:不分大小写/.../i,多行m(^, $),全局返回g,Unicode

多行模式控制的是 ^ 和 $ 的表现,单行模式控制的是 "." 的表现,两者没有直接关系。
然而当初引入单行模式和多行模式这两个易混淆概念的 Perl 语言,已经在 Perl 6 中完全删除了这两个模式:"." 号默认就匹配换行符,\N 可以匹配换行符除外的任意字符;^ 和 $ 始终匹配字符串的首尾,而新引入了 ^^ 和 $$ 两个元字符来匹配行的首尾。

text.replace(/'([^']*)'/g,'"$1"') // 将单引号替换成双引号,中间的内容不变(子表达式记忆,$1引用)