创建 正则对象:
// 以下三种方法均可以
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
let regex2 = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex3 = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
正则表达式中的特殊字符:
修饰符 | 描述 |
---|---|
i | 不区分大小写搜索。 |
g | 全局搜索。 |
m | 多行搜索。 |
元字符 | 描述 | 例子 |
---|---|---|
. | 匹配除换行符之外的任何单个字符。 | /.n/将会匹配 "nay, an apple is on the tree" 中的 'an' 和 'on' |
\ | 在非特殊字符之前的反斜杠表示下一个字符是特殊的; 反斜杠也可以将其后的特殊字符,转义为字面量。 | 如 /\bm/ 表示匹配一个非单词边界的m; 如 /a\*/ 表示匹配 "a*" 这样的字符串。 |
? | 使用 非贪婪模式。 | 对 "123abc" 应用 /\d+/ 将返回 "123",使用 /\d+?/ 返回 "1" |
x|y | 或运算,匹配‘x’或者‘y’。 | /green|red/匹配“green apple”中的‘green’和“red apple”中的‘red’ |
^ | 匹配输入的开始。 | /^A/ 并不会匹配 "an A" 中的 'A',但是会匹配 "An E" 中的 'A' |
$ | 匹配输入的结束。 | /t$/ 并不会匹配 "eater" 中的 't',但是会匹配 "eat" 中的 't' |
\b | 匹配一个单词边界。 | /\bm/匹配“a moon b”中得‘m’;/oo\b/并不匹配"moon"中得'oo' |
\B | 匹配一个非单词边界。 | /\B../匹配"noonday"中的'oo', 而/y\B../匹配"hi yesterday"中的’yes‘ |
\d | 匹配一个数字。等价于[0-9]。 | /\d/ 或者 /[0-9]/ 匹配"B2 is the suite number."中的'2' |
\D | 匹配一个非数字。 | /\D/ 或者 /[^0-9]/ 匹配"B2 is the suite number."中的'B' |
\s | 匹配一个空白字符。 | /\s\w*/ 匹配"foo bar."中的' bar' |
\S | 匹配一个非空白字符。 | /\S\w*/ 匹配"foo bar."中的'foo' |
\w | 匹配一个单字字符(字母、数字或者下划线)。 | /\w/ 匹配 "apple," 中的 'a',"$5.28,"中的 '5' 和 "3D." 中的 '3' |
\W | 匹配一个非单字字符。 | /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%' |
\n | 匹配一个换行符。 | |
\t | 匹配一个水平制表符 | |
\v | 匹配一个垂直制表符 | |
\1 | 匹配第一个捕获括号的内容。 "1" 可以换成其他大于0的证书。 | 看下方例子。 |
小括号 | 描述 | 例子 |
---|---|---|
(xx) | 匹配 'xx' 并且记住匹配项。被称为捕获括号。 即,以括号内为整体,且存放用于之后操作。 | 模式/(foo) (bar) \1 \2/中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。 在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。 |
(?:xx) | 匹配 'x' 但是不记住匹配项。被称为非捕获括号。 与上例子的唯一差别是不被"记住"。 | 表达式 /(?:foo){1,2}/ 匹配"fooAfoofooBfo"中的'foo'和'foofoo'。 注意, /foo{1,2}/,只对 ‘foo’ 的最后一个 ’o‘ 生效。 |
x(?=y) | 匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。 | /Jack(?=Sprat)/ 会匹配到 'JackSprat....' |
x(?!y) | 匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。 | /\d+(?!\.)/ 匹配到 "3.141" 中的 ‘141’ 但是不是 ‘3.141’ |
量词 | 描述 | 例子 |
---|---|---|
+ | 匹配前一个表达式1次或多次。等价于 {1,}。 | /bo+/会匹配 "A ghost boooed" 中的 'booo' |
* | 匹配前一个表达式0次或多次。等价于 {0,}。 | /bo*/会匹配 "A ghost boooed" 中的 'booo' 和 "A bird" 中的 'b' |
? | 匹配前面一个表达式0次或者1次。等价于 {0,1}。 (紧跟在任何量词后面可作为非贪婪模式的用法) | /e?le?/ 匹配 "angel" 中的 'el',和 "angle" 中的 'le' 以及"oslo' 中的'l' |
{n} | 匹配前面一个表达式n次。 | /a{2}/不会匹配“candy”中的'a',但是会匹配“caaandy”中的前两个'a' |
{n,m} | 匹配前面一个表达式至少n次,最多m次。 | /a{1, 3}/会匹配“candy”中的a,也匹配“caaaandy”中的前三个a |
更多可查看:W3school 或 MDN论坛 。还有,正则表达式在线测试。
支持正则表达式的方法:
方法 | 描述 |
---|---|
exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。 |
test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。 |
match | 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。 |
search | 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
replace | 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split | 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。 |