RegExp基础语法

匹配模式

创建正则表达式对象时,可以设置’m’、’i’、’g’这三个标志,分别对应多行模式、不区分大小模式和全局模式三种

全局模式 g:
默认地,第一次匹配成功后,正则对象就停止向下匹配了。g 修饰符表示全局匹配(global),设置’g’标志后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换

console.log('1a,2a,3a'.replace(/a/,'b'));//'1b,2a,3a'
console.log('1a,2a,3a'.replace(/a/g,'b'));//'1b,2b,3b'
特点:javascript 中的正则表达式最大的特点是不支持空白,必须写在一行中
//匹配ab
console.log(/ab/.test("ab")); //true
console.log(/ ab/.test("ab")); //false
console.log(/a b/.test("ab")); //false
console.log(/ab /.test("ab")); //false

元字符

元字符         名称              匹配对象
.             点号               单个任意字符(除回车\r、换行\n、行分隔符\u2028和段分隔符\u2029外)
[]            字符组             列出的单个任意字符
[^]           排除型字符组        未列出的单个任意字符
?             问号               匹配0次或1次
*             星号               匹配0交或多次
+             加号               匹配1次或多次
{min,max}     区间量词            匹配至少min次,最多max次
^             脱字符             行的起始位置
$             美元符             行的结束位置
|             竖线               分隔两边的任意一个表达式
()            括号               限制多选结构的范围,标注量词作用的元素,为反向引用捕获文本
\1,\2...      反向引用            匹配之前的第一、第二...组括号内的表达式匹配的文本

转义字符

  • 【1】因为元字符有特殊的含义,所以无法直接匹配。如果要匹配它们本身,则需要在它们前面加上反斜杠()

    右方括号]和右花括号}不需要转义
  • 【2】’'加非元字符,表示一些不能打印的特殊字符

    \0        NUL字符\u0000
    [\b]      匹配退格符\u0008,不要与\b混淆
    \t        制表符\u0009
    \n        换行符\u000A
    \v        垂直制表符\u000B
    \f        换页符\u000C
    \r        回车符\u000D
    \xnn      由十六进制数nn指定的拉丁字符
    \uxxxx    由十六进制数xxxx指定的Unicode字符(\u4e00-\u9fa5代表中文)
    \cX       控制字符^X,表示ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符
    ‘'加任意其他字符,默认情况就是匹配此字符,也就是说,反斜线()被忽略了

字符组

  • 范围
    正则表达式通过连字符(-)提供了范围表示法,可以简化字符组
/[0123456789]/
//等价于
/[0-9]/
/[abcdefghijklmnopqrstuvwxyz]/
//等价于
/[a-z]/
  • 排除
    字符组的另一个类型是排除型字符组,在左方括号后紧跟一个脱字符’^’表示,表示在当前位置匹配一个没有列出的字符,所以1表示 0-9 以外的字符

在字符组内部,脱字符’^’表示排除,而在字符组外部,脱字符’^’表示一个行锚点

^符号是元字符,在字符组中只要^符号不挨着左方括号就可以表示其本身含义,不转义也可以

//匹配abc和^符号
console.log(/[a-c^]/.test("^")); //true
console.log(/[a-c\^]/.test("^")); //true
console.log(/[\^a-c]/.test("^")); //true
  • 简记

    \d     数字,等同于[0-9]
    \D     非数字,等同于[^0-9]
    \s     空白字符,等同于[\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]
    \S     非空白字符,等同于[^\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]
    \w     字母、数字、下划线,等同于[0-9A-Za-z_](汉字不属于\w)
    \W     非字母、数字、下划线,等同于[^0-9A-Za-z_]
  • 量词

    // 默认情况下,量词都是贪婪模式(greedy quantifier),即匹配到下一个字符不满足匹配规则为止
    {n}       匹配n次
    {n,m}     匹配至少n次,最多m次
    {n,}      匹配至少n次
  • 相当于{0,}
  • 相当于{1,}

    懒惰模式(lazy quantifier)和贪婪模式相对应,在量词后加问号’?’表示,表示尽可能少的匹配,一旦条件满足就再不往下匹配
{n}?       匹配n次
{n,m}?     匹配至少n次,最多m次
{n,}?      匹配至少n次
??         相当于{0,1}
*?         相当于{0,}
+?         相当于{1,}

括号

括号有两个功能,分别是分组和引用。具体而言,用于限定量词或选择项的作用范围,也可以用于捕获文本并进行引用或反向引用

console.log(/a(?=b)/.exec("abc")); //['a']
console.log(/a(?=b)/.exec("ac")); //null
console.log(/a(?!b)/.exec("abc")); //null
console.log(/a(?!b)/.exec("ac")); //['a']

console.log(/a(?=b)b/.exec("abc")); //['ab']

优先级

//从上到下,优先级逐渐降低
\                            转义符
() (?!) (?=) []              括号、字符组、环视
* + ? {n} {n,} {n,m}         量词
^ $                          起始结束位置
|                            选择

你可能感兴趣的:(RegExp基础语法)