Fork me on GitHub

JS-正则表达式

正则表达式

新建

字面量
let re=/ab+c/
构造函数
let re=new RegExp("ab+c")

特殊字符

符号 说明
\ 在非字符串之前的反斜杠表示下一个字符是特殊字符,不能按照字面理解。
‘b’ => 小写字母
‘\b’ => 字符边界
在特殊字符之前的反斜杠表示下一个字符不是特殊字符,应按照字母理解
^ 1.匹配输入字符串的开始位置,2.如果出现在一个字符集合模式(方括号)里,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline (多行标志)属性,则 \$ 也匹配 '\n''\r'。要匹配 $ 字符本身,请使用 \$
. 默认匹配除换行符\n之外的任何单个字符,如果 s (“dotAll”) 标志位被设为 true,它也会匹配换行符。
(x) 标记一个子表达式 的开 x 始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
[xyz] 一个字符集。匹配 x,y,z 三个字符中的任意一个
[^xyz] 一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。
[^abc]等于[^a-c],匹配‘brisket’,第一个匹配结果是’r’。
` ` 或者

数量限定符

符号 说明
* 匹配前面的子表达式零次或多次。等价于 {0,}。要匹配 \* 字符,请使用 \*
+ 匹配前面一个表达式 1 次或者多次。等价于 {1,}。要匹配 \+ 字符,请使用 \+
. (小数点)默认匹配除换行符之外的任何单个字符。
? 如果紧跟在任何量词 *+?{} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。要匹配?字符,请使用 \?
{n} n 是一个正整数,匹配前一个字符串刚好连续出现 n 次。
{n,} n 是一个正整数,匹配前一个字符至少出现了 n 次。
{n,m} n 和 m 都是整数。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0, 这个值被忽略。

预定义符

符号 说明
\d 匹配一个数字字符,等价于[0-9]
\D 匹配一个非数字字符,等价于[^0-9]
\w 匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。
\W 匹配一个非单字字符。等价于 [^a-za-z0-9_]。
\s 匹配一个空白字符,包括空格、制表符、换页符、换行符。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^\f\n\r\t\v]。

非打印字符

符号 说明
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \xOd 和\cM
\t 匹配一个制表符,等价于\x09 和\cL
\v 匹配一个垂直制表符,等价于\x0b 和\cK
[\b] 匹配一个退格
\b 匹配一个词的边界,不包括边界。
/\bm/匹配’moon’中的 m
/oo\b/匹配不到’moon’中的’oo’
\B 匹配一个非单词边界
/y\B../匹配”possibly yesterday”中的’yes‘。

修饰符

var re=/pattern/flags
var re=new RegExp('pattern','flags')

修饰符 含义 描述
i ignore - 不区分大小写 将匹配设置为不区分大小写
g global - 全局匹配 查找所有的匹配项
m multi line - 多行匹配 使边界字符 ^ 和 \$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s 特殊字符圆点. 中包含换行符\n 默认情况下的圆点.是匹配除换行符\n之外的任何字符,加上s修饰符之后, .中包含换行符 \n
u 使用 unicode 码的模式进行匹配
y 执行粘性搜索,匹配从目标字符串的当前位置开始

方法

  • exec
    reg.exec(‘string’)
    用于检索字符串中的正则表达式的匹配。返回一个匹配到的字符数组,否则返回 null
  • test
    reg.test(‘string’)
    用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,
  • match
    ‘string’.match(reg)
    一个在字符串中执行查找匹配的 String 方法,它返回一个数组,在未匹配到时会返回 null。

    返回值

    • 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
    • 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。
  • matchAll
    str.matchAll(regexp)
    一个在字符串中执行查找所有匹配的 String 方法,它返回一个迭代器

  • search
    string.search(reg)
    一个在字符串中测试匹配的 String 方法,它返回匹配到的位置索引,或者在失败时返回-1。

  • replace
    str.replace(regexp|substr, newSubStr|function)
    一个在字符串中执行查找匹配的 String 方法,并且使用替换字符串替换掉匹配到的子字符串。

替换日期格式,yy.zz/xxxx 替换成 xxxx-zz-yy 可以使用 正则的捕获组来实现

1
2
3
const reg = /(\d{2}).(\d{2})\/(\d{4})/
let time = '10.24/1998';
time = time.replace(reg, `$3-$1-$2`)
-------------本文结束感谢阅读-------------