特殊字符

# 特殊字符

特殊字符 正则表达式 记忆方式
换行符 \n new line
换页符 \f form feed
回车符 \r return
空白符 \s space
制表符 \t tab
垂直制表符 \v vertical tab
回退符 [\b] backspace,之所以使用[]符号是避免和\b重复

# 匹配多字符

匹配区间 正则表达式 记忆方式
除了换行符之外的任何字符 . 句号,除了句子结束符
单个数字, [0-9] \d digit
除了[0-9] \D not digit
包括下划线在内的单个字符,[A-Za-z0-9_] \w word
非单字字符 \W not word
匹配空白字符,包括空格、制表符、换页符和换行符 \s space
匹配非空白字符 \S not space

# 单词边界

\b,boundary,在正则引擎里它其实匹配的是能构成单词的字符(\w)和不能构成单词的字符(\W)中间的那个位置。

The cat scattered his food all over the room.
/\bcat\b/    // 匹配cat这个单词,而不会匹配到scattered里的cat

# 字符串边界

^表示开头

$表示结尾

# 匹配模式

I am scq000.
I am scq000.
I am scq000.

/^I am scq000\.$/m    // m , multiple line 多行模式排除换行符的干扰

i 忽略大小写 ignore

g找到所有符合的匹配

# 回溯引用

\1引用第一个子表达式

\2引用第二个子表达式

\0引用整个表达式

Hello what what is the first thing, and I am am scq000.

匹配上面句子中两个连续相同的单词/\b(\w+)\s\1/

# 替换字符串

回溯引用在替换字符串中语法上有些区别,使用$1,$2,$0

var str = 'abc abc 123';
str.replace(/(ab)c/g,'$1g');
// 得到结果 'abg abg 123'

# 非捕获正则

如果我们不想子表达式被引用,可以使用非捕获正则(?:regex)这样就可以避免浪费内存。

var str = 'scq000'.
str.replace(/(scq00)(?:0)/, '$1,$2')
// 返回scq00,$2
// 由于使用了非捕获正则,所以第二个引用没有值,这里直接替换为$2

# 摘抄自文章

正则表达式不要背 - 掘金 (opens new window)