图形化界面
https://regexper.com/

知识点

  • 单词边界:
    /\bis\b/
    \b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w(匹配字母或数字或下划线或汉字)
  • 修饰符(g/i/m)
    m:多行匹配
  • 元字符
    (* + ? $ ^ . | \ ( ) { } [ ])
  • 非打印字符
    \cx:匹配由x指明的控制字符
    \s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
  • 预定义类
字符 等价 含义
. [^\n\r] 除了回车符和换行符之外的所有字符
\w [a-zA-Z_0-9] 单词字符(字母、数字、下划线)
- 边界
字符 含义
\b 单词边界,指[a-zA-Z_0-9]之外的字符
  • 量词

    出现多少次

字符 含义
出现零次或一次
* 出现零次或多次(任意次)
+ 至少一次
  • 贪婪与懒惰(非贪婪)
    /\d{3,6}/
    贪婪模式: 可能多的匹配
    懒惰模式(量词后加):尽可能少的情况
    /\d{3,6}?/

  • 反向引用之: ?:
    /^(?:\d{4})[/-](\d{2})[/-](\d{2})$/
    如果在反向引用中不想捕获年该如何操作? 加上 ?:即可.

  • 前瞻
    正向前瞻(?=xxx),
    负向前瞻(?!xxx)


  • new RegExp(“pattern”)
    不要忘记将 \ 进行转义,因为 \ 在字符串里面也是一个转义字符。
    当正则需要传参的时候,一定要用全称的写法
    RegExp('\\b'+sClass+'\\b')
  • \1 重复子项

    其他

  • [\b]:退格

    方法

    正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1

match

如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
'abc'.match(/(ab)(c)/)
["abc", "ab", "c"]
当match不加g的时候才可以获取到子项的集合

exec

  • exec与match的关联:等价于不含有g全局标志的match.
  • 但如果有g对exec本身的影响是,当一个具有g的正则表达式调用exec()时,他将该对象的lastIndex设置到紧接这匹配子串的字符位置.当第二次调用exec时将从
    lastIndex所指示的字符位置开始检索.利用这个特点可以反复调用exec遍历所有匹配.等价于match具有g标志.
1
2
3
4
5
6
7
8
9
10
str = "abbb34eftab0modabbbbb6";
var reg = /a(b)+(\d+)/g;// then test: var reg = /a(b)+(\d+)/i
while((arr = reg.exec(str)) != null){//下次调用时,遍历的index变了。
document.write(arr[0] + "---->");
}
document.write("<br/>")
var arrmatch = str.match(reg);
for(var i = 0; i < arrmatch.length; i++){
document.write(arrmatch[i] + "---->");
}

不明白

  • /\d+(?!\.)/
    /\d+(?!\.)/.exec("3.141"):
    匹配括号否定后面的。相应的,另一个正向肯定匹配括号前面的。

    总结

  1. 问号两种含义:
  • 放到量词后面是懒惰模式
  • 放到字符后面是量词
  1. *.的区别
    第一个是量词至少0个,第二个是预定义类

参考资料

看完你就会正则表达式了