元字符
在正则存在着特定的字符属于字符独有的内容,其中元字符包括:. [] [^] ? * + {min,max} ^ $ () \1\2 |。
转义字符\
对于元字符来说需要进行反斜杠的转移\。
字符组[][^]
[^]^符号必须在范围的前边
/[0-9a-zA-Z]/
//取反
/[^0-9]/
简写形式:
- \d [0-9] \D[^0-9]
- \w[0-9a-zA-Z] \W[^0-9a-zA-Z]
- \s[\f\t\r\n...]空白字符 \S[^\f\t\r\n...]
量词
- {n}匹配n次
- {n,m}最少匹配n次最多匹配m次
- {n,}最少匹配n次,最多无限次
简写形式:
- ? {0,1}
- ※ {0,}
- + {1,}
/\d{6}/.exec('973557')
/\d{6}/.text('973557')
/\d{0,1}/.text('973')
/\d?/.text('973')
//改变贪婪模式
/\d??/.text('973')
正则存在贪婪模式,默认的匹配模式。可以在简写形式的后边加上一个?可以将贪婪模式改变。
括号的用法(分组和引用)
分组(子表达式)
在JS中,可以使用RegExp来进行构造函数的实例化建立正则。
//括号可以用来对匹配的东西进行分组,并且可以捕获分组的值
/(\d{4})-(\d{1,2})-(\d{1,2})/
var reg = newRegExp('(\d{4})-(\d{1,2})-(\d{1,2})')
//这两个效果一样
反向引用\1
<h1><h1>123</h1></h1>
/<([^<>]+)>[\w\W]*<\/\1>/.exec('<h1><h1>123</h1></h1>')
非捕获?:
//捕获
/(abc){2}/
//非捕获
/(?:abc){2}/
选择关系|
自左向右,一旦匹配上,就不在回头。
//匹配0-255
/25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d/
断言\b\b
判断是否在边界
- \b\b单词边界
- \B\B非边界
- ^开头
- $结尾
/\ban/.text('an anapple')
/^an/.text('anpple')
/le$/.text(''anpple)
环视
紧跟着b的a
//紧跟着b的a
/a(?=b)/
//非紧跟着b的a
/a(?!b)/