特殊字符
# 特殊字符
特殊字符 | 正则表达式 | 记忆方式 |
---|---|---|
换行符 | \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