字符
普通字符:字母 数字 汉字 _ 等
特殊字符:点击查看
\d
:数字0-9 \D
:非数字 \s
:空白符(空格 回车 tab) \S
:非空白符 \w
\W
^
:匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。
$
:匹配输入的结束。如果多行标志被设置为 true,那么也匹配换行符前的位置。
*
:匹配前一个表达式 0 次或多次。等价于 {0,}
。
+
:匹配前面一个表达式 1 次或者多次。等价于 {1,}
。
?
:匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}
。如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。
.
:(小数点)默认匹配除换行符之外的任何单个字符。如果 s
(dotAll
) 标志位被设为 true,它也会匹配换行符。
(x)
:像下面的例子展示的那样,它会匹配 x
并且记住匹配项。其中括号被称为捕获括号。
(?:x)
:匹配 x
但是不记住匹配项。这种括号叫作非捕获括号
x(?=y)
:匹配x
仅仅当x
后面跟着y
.这种叫做先行断言。
(?<=y)x
:匹配x
仅当x
前面是y
.这种叫做后行断言。
x(?!y)
:仅仅当x
后面不跟着y
时匹配x
,这被称为正向否定查找。
(?<!y)x
:仅仅当x
前面不是y
时匹配x
,这被称为反向否定查找。
x|y
:匹配x
或者y
。
{n}
:n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。比如, /a{2}/ 不会匹配“candy”中的a
,但是会匹配“caandy”中所有的 a,以及“caaandy”中的前两个a
。
{n,}
:n是一个正整数,匹配前一个字符至少出现了n次。例如, /a{2,}/ 匹配 aa
, aaaa
和 aaaaa
但是不匹配 a
。
{n,m}
:n
和m
都是整数。匹配前面的字符至少n
次,最多m
次。如果 n
或者m
的值是0, 这个值被忽略。
[xyz]
:一个字符集合。匹配方括号中的任意字符,包括转义序列。你可以使用破折号-
来指定一个字符范围。
[^xyz]
:一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号-
来指定一个字符范围。
[\b]
:匹配一个退格(U+0008)
。
\b
:匹配一个词的边界。一个词的边界就是一个词不被另外一个字
字符跟随的位置或者前面跟其他字
字符的位置,例如在字母和空格之间。
\B
:匹配一个非单词边界。匹配如下几种情况:
- 字符串第一个字符为非
字
字符 - 字符串最后一个字符为非
字
字符 - 两个单词字符之间
- 两个非单词字符之间
- 空字符串
\d
:匹配一个数字。等价于[0-9]
。
\D
:匹配一个非数字字符。等价于[^0-9]
。
\n
匹配一个换行符 (U+000A)。
\r
匹配一个回车符 (U+000D)。
\s
匹配一个空白字符,包括空格、制表符、换页符和换行符。
\S
匹配一个非空白字符。例如,/\S\w*/
匹配foo bar.
中的foo
。
\t
匹配一个水平制表符 (U+0009)。
\v
:匹配一个垂直制表符 (U+000B)。
\w
:匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]
。例如,/\w/
匹配 apple,
中的 a
,$5.28,
中的 5
和 3D.
中的 3
。
\W
:匹配一个非单字字符。
\n
:在正则表达式中,它返回最后的第n个子捕获匹配的子字符串(捕获的数目以左括号计数)。比如/apple(,)\sorange\1/
匹配apple, orange, cherry, peach.
中的apple, orange,
。
如何创建正则表达式对象?
对象的构造函数写法
var reg = new RegExp(para1,para2);
para需要写成字符串格式
para1
:正则规则para2
:规则属性g
全局搜索。i
不区分大小写搜索。m
多行搜索。s
允许 . 匹配换行符。u
使用unicode
码的模式进行匹配。y
执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。
语法糖(字面量)创建写法
其由包含在斜杠之间的模式组成,var reg = /para1/para2
正则表达式(RegExp)和字符串(String)的方法
str.match(regexp)
方法在字符串 str
中找到匹配 regexp
的字符。
- 如果
regexp
不带有g
标记,则它以数组的形式返回第一个匹配项,其中包含分组和属性index
(匹配项的位置)、input
(输入字符串,等于str
) - 如果
regexp
带有g
标记,则它将所有匹配项的数组作为字符串返回,而不包含分组和其他详细信息。 - 如果没有匹配项,则无论是否带有标记
g
,都将返回null
。
str.matchAll(regexp)
是 str.match
“新改进的”变体。
str.split(regexp|substr, limit)
使用正则表达式(或子字符串)作为分隔符来分割字符串。
str.search(regexp)
返回第一个匹配项的位置,如果未找到,则返回 -1
; 重要限制:search
仅查找第一个匹配项。
**str.replace(str|regexp, str|func)
**当 replace
的第一个参数是字符串时,它仅替换第一个匹配项;第二个参数是一个替代字符串。我们可以在其中使用特殊字符;对于需要“智能”替换的场景,第二个参数可以是一个函数。
regexp.test(str)
查找匹配项,然后返回 true/false
表示是否存在。如果正则表达式带有标记 g
,则 regexp.test
从 regexp.lastIndex
属性中查找,并更新此属性,可以用它从给定位置进行搜索
小问题
正则表达式引擎查找选择模式的时是挨个查找的。先匹配是否存在 Java
,否则 —— 接着匹配 JavaScript
及其后的字符串。
- 变更匹配顺序,长的字符串优先匹配:
JavaScript|Java|C\+\+|C|PHP
。 - 合并相同前缀:
Java(Script)?|C(\+\+)?|PHP
。