正则 字符 非打印字符
字符
描述
\cx
x 的值必须为 A-Z 或 a-z 之一,例如, \cM 匹配一个 Control-M 或回车符。
\f
匹配一个换页符 。等价于 \x0c 和 \cL。
\n
匹配一个换行符 。等价于 \x0a 和 \cJ。
\r
匹配一个回车符 。等价于 \x0d 和 \cM。
\s
匹配任何空白字符 ,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S
匹配任何非空白字符 。等价于 [^ \f\n\r\t\v]。
\t
匹配一个制表符 。等价于 \x09 和 \cI。
\v
匹配一个垂直制表符 。等价于 \x0b 和 \cK。
特殊字符
特别字符
描述
$
匹配输入字符串的结尾位置 。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。
^
匹配输入字符串的开始位置 ,除非在方括号表达式中 使用,此时它表示不接受该字符集合
|
指明两项之间的一个选择
*
匹配前面的子表达式零次或多次
+
匹配前面的子表达式一次或多次
?
匹配前面的子表达式零次或一次 ,或指明一个非贪婪限定符
.
匹配除换行符 \n之外 的任何单字符
( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
[
标记一个中括号表达式的开始
{
标记限定符表达式的开始
\
转义字符
限定字符
*
: 0次 或 多次, 等价于{0,}. e.g: /zo*/
能匹配 z zo zoo zooo
+
: 1次 或 多次, 等价于 {1,}. e.g: /zo+/
能匹配 zo zoo zooo
?
: 0次 或 1次, 等价于 {0,1}. e.g: /zo(es)?/
能匹配 zoes 和 zoo zoas中的zo
{n}
: 确定的n次. e.g.: /o{2}/
不能匹配 fod中的o,但可以food中的 oo
{n,}
: 至少n次.
{n,m}
: 最少n次,最多m次
贪婪
*、+和?限定符都是贪婪的,只有在之后加?可以实现最小匹配
定位符
^
: 字符串的开头
$
: 字符串的结尾
\b
: 一个字边界,即字与空格间的位置
\B
: 非字边界匹配
不能将限定符与定位符一起使用:避免 ^*
之类表达式
例子 1 2 3 4 5 6 7 8 9 10 11 /^Chapter [1 -9 ][0 -9 ]{0 ,1 }$/ /\bCha/ /\Bapt/
选择
用()
将所有选择项括起来,相邻的选择项之间用|
分隔
副作用:相关的匹配会被缓存:
非获取匹配
放在第一个选项前来消除这种副作用, 也就是说,该匹配不需要获取供以后使用
(?:pattern)
: 获取匹配结果
industr(?:y|ies)
等于 industry|industries
x(?=y)
: 先行断言,只有x后跟着y时,才能匹配 x
Windows (?=95|98|NT|2000)
能匹配 "Windows 2000"
中的 "Windows"
,但不能匹配 "Windows 3.1"
中的 "Windows"
(?<=y)x
: 后行断言, 只有x前面是y时,才能匹配 x
(?<=Wayne) Zhang
只有是"Wayne Zhang"
会匹配到 Wayne
x(?!y)
: 正向否定查找,在x后面不是y时,匹配 x
Windows (?!95|98|NT|2000)
能匹配 "Windows 3.1"
中的 "Windows"
,但不能匹配 "Windows 2000"
中的 "Windows"
。
(?<!y)x
: 反向否定查找,在x前面不是y时,匹配 x
元字符
[xyz]
: 能匹配[]
内的任意字符。
[a-zA-Z]
: 匹配所有的字母 匹配指定范围内的任意字符
[ \f\r\t\n]
: 匹配所有的白字符
[^xyz]
: 匹配未包含的任意字符
[^a-z]
: 负值字符范围。匹配任何不在指定范围内的任意字符
[\b]
: 退格
区分和 \b
词边界
\d
: 匹配一个数字字符 。等价于 [0-9]
\D
: 匹配一个非数字字符。等价于 [^0-9]
\w
: 匹配包括下划线的任何单词字符 。等价于[A-Za-z0-9_]
\W
: 匹配任何非单词字符 。等价于 [^A-Za-z0-9_]
\xn
: 匹配 n,十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41’ 匹配 “A”。’\x041’ 则等价于 ‘\x04’ & “1”。正则表达式中可以使用 ASCII 编码
例子
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
: 将一个URL解析为议、域、端口及相对路径: http://www.w3cschool.cn:80/html/html-tutorial.html
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
: 定位章节的位置
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
: HTML tag: <div id="ads">asd</div>
使用正则 regexObj.exec(str)
1 2 3 4 5 6 7 8 9 10 var re = /quick\s(brown).+?(jumps)/ig ;var result = re.exec ('The Quick Brown Fox Jumps Over The Lazy Dog' );
regexObj.test(str)
1 2 3 let str = 'hello world!' ;let result = /^hello/ .test (str);console .log (result);
设置全局时,会改变正则表达式 lastIndex 属性
str.match(regexp)
如果未使用g标志,返回第一个完整匹配及其相关的捕获组(Array)
如果使用g标志,返回与完整正则表达式匹配的所有结果数组,但不是捕获组
str.matchAll(regexp)
需要 -g
返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
类似于 while 循环加 exec
方式
1 2 3 4 let array = [...str.matchAll (regexp)];array[0 ] array[1 ]
str.search(regexp)
str.replace(regexp|substr, newSubStr|function)
1 2 3 4 5 6 7 8 9 10 11 12 13 var newstr = "John Smith" .replace (/(\w+)\s(\w+)/ , "$2, $1" ); function replacer (match, p1, p2, p3, offset, string ) { return [p1, p2, p3].join (' - ' ); } var newString = 'abc12345#$*%' .replace (/([^\d]*)(\d*)([^\w]*)/ , replacer);console .log (newString);
str.split([separator[, limit]])
separator
: 字符串或正则表达式
limit
: 限定返回的分割片段数量
工具 正则表达式在线测试 参考:文档 CSDN
<
path.join & path.resolve
Vue Intro
>