面试之正则表达式

74 阅读1分钟

元字符

在正则存在着特定的字符属于字符独有的内容,其中元字符包括:. [] [^] ? * + {min,max} ^ $ () \1\2 |。

转义字符\

对于元字符来说需要进行反斜杠的转移\。

字符组[][^]

[^]^符号必须在范围的前边

/[0-9a-zA-Z]/
//取反
/[^0-9]/

简写形式:

  1. \d [0-9] \D[^0-9]
  2. \w[0-9a-zA-Z] \W[^0-9a-zA-Z]
  3. \s[\f\t\r\n...]空白字符 \S[^\f\t\r\n...]

量词

  1. {n}匹配n次
  2. {n,m}最少匹配n次最多匹配m次
  3. {n,}最少匹配n次,最多无限次

简写形式:

  1. ? {0,1}
  2. ※ {0,}
  3. + {1,}
/\d{6}/.exec('973557')
/\d{6}/.text('973557')
/\d{01}/.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/

image.png

断言\b\b

判断是否在边界

  1. \b\b单词边界
  2. \B\B非边界
  3. ^开头
  4. $结尾
/\ban/.text('an anapple')
/^an/.text('anpple')
/le$/.text(''anpple)

环视

紧跟着b的a

//紧跟着ba
/a(?=b)/
//非紧跟着ba
/a(?!b)/

image.png