正则表达式语法,正则表达式文档,正则表达式速查表,正则表达式元字符,正则表达式教程

正则表达式语法,正则表达式文档,正则表达式速查表,正则表达式元字符,正则表达式教程

正则元字符

元字符(Metacharacter)是指在正则表达式中具有特殊意义的专用字符。它们可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式。

在正则表达式中有 . ? * + ( ) [ ] { } \ | ^ $ = 等元字符,用这些元字符可以组成各种各样的正则表达式

元字符

元字符使用示例

//字符串只要包含 abc 中的一个就能匹配
console.log( /[abc]/.test('xyzabc') + ' -> ' + /[abc]/.exec('xyzabc') );    // true -> a
console.log( /[abc]/.test('xyzxyz') + ' -> ' + /[abc]/.exec('xyzxyz') );    // false -> null

//字符串只要有 abc 以外的字符就能匹配
console.log( /[^abc]/.test('abcxyz') + ' -> ' + /[^abc]/.exec('abcxyz') );  // true -> x
console.log( /[^abc]/.test('abcabc') + ' -> ' + /[^abc]/.exec('abcabc') );  // false -> null

//字符串只要包含 a-g 中的一个就能匹配
console.log( /[a-g]/.test('xyzabc') + ' -> ' + /[a-g]/.exec('xyzabc') );    // true -> a
console.log( /[a-g]/.test('xyzxyz') + ' -> ' + /[a-g]/.exec('xyzxyz') );    // false -> null

//字符串只要有 a-g 以外的字符就能匹配
console.log( /[^a-g]/.test('xyzabc') + ' -> ' + /[^a-g]/.exec('xyzabc') );  // true -> x
console.log( /[^a-g]/.test('abcabc') + ' -> ' + /[^a-g]/.exec('abcabc') );  // false -> null

//字符串只要包含 a-g H-N 中的一个就能匹配
console.log( /[a-gH-N]/.test('xyzHbc') + ' -> ' + /[a-gH-N]/.exec('xyzHbc') );  // true -> H
console.log( /[a-gH-N]/.test('xyzxyz') + ' -> ' + /[a-gH-N]/.exec('xyzxyz') );  // false -> null

//字符串只要包含 0-9 中的一个就能匹配
console.log( /[0-9]/.test('xyz123') + ' -> ' + /[0-9]/.exec('xyz123') );    // true -> 1
console.log( /[0-9]/.test('xyzxyz') + ' -> ' + /[0-9]/.exec('xyzxyz') );    // false -> null

//字符串只要包含 0或9 中的一个就能匹配
console.log( /[0|9]/.test('xyz012') + ' -> ' + /[0|9]/.exec('xyz012') );    // true -> 0
console.log( /[0|9]/.test('123xyz') + ' -> ' + /[0|9]/.exec('123xyz') );    // false -> null

//字符串只要包含除换行符之外的任何字符就能匹配
console.log( /./.test('\n\n01') + ' -> ' + /./.exec('\n\n01') );            // true -> 0
console.log( /./.test('\n\n\n') + ' -> ' + /./.exec('\n\n\n') );            // false -> null

//字符串只要包含空白字符就能匹配
console.log( /\s/.test('xyz ') + ' -> ' + /\s/.exec('xyz ') );              // true -> ' '
console.log( /\s/.test('xyz') + ' -> ' + /\s/.exec('xyz') );                // false -> null

//字符串只要包含非空白字符就能匹配
console.log( /\S/.test('  xyz') + ' -> ' + /\S/.exec('  xyz') );            // true -> x
console.log( /\S/.test('\t \n') + ' -> ' + /\S/.exec('\t \n') );            // false -> null

//字符串只要包含数字就能匹配
console.log( /\d/.test('xyz123') + ' -> ' + /\d/.exec('xyz123') );          // true -> 1
console.log( /\d/.test('xyzxyz') + ' -> ' + /\d/.exec('xyzxyz') );          // false -> null

//字符串只要不包含数字就能匹配
console.log( /\D/.test('123xyz') + ' -> ' + /\D/.exec('123xyz') );          // true -> x
console.log( /\D/.test('123123') + ' -> ' + /\D/.exec('123123') );          // false -> null

//字符串只要包含数字或字母就能匹配
console.log( /\w/.test('\nxyz') + ' -> ' + /\w/.exec('\nxyz') );            // true -> x
console.log( /\w/.test('\n \t') + ' -> ' + /\w/.exec('\n \t') );            // false -> null

//字符串只要不包含数字或字母就能匹配
console.log( /\W/.test('\n\txy') + ' -> ' + /\W/.exec('\n\txy') );          // true -> \n 
console.log( /\W/.test('xyzxyz') + ' -> ' + /\W/.exec('xyzxyz') );          // false -> null

//字符串包含abc其中c可以出现0-n次
console.log( /abc*/.test('xyzabccc') + ' -> ' + /abc*/.exec('xyzabccc') );        // true -> abccc
console.log( /abc*/.test('xyzabxyz') + ' -> ' + /abc*/.exec('xyzabxyz') );        // true -> ab 
console.log( /abc*/.test('xyzaaxyz') + ' -> ' + /abc*/.exec('xyzaaxyz') );        // false -> null

//字符串包含abc其中c至少出现一次
console.log( /abc+/.test('xyzabccc') + ' -> ' + /abc+/.exec('xyzabccc') );        // true -> abccc
console.log( /abc+/.test('xyzabxyz') + ' -> ' + /abc+/.exec('xyzabxyz') );        // false -> null

//字符串包含abc其中c只匹配0-1次
console.log( /abc?/.test('xyzabccc') + ' -> ' + /abc?/.exec('xyzabccc') );        // true -> abc
console.log( /abc?/.test('xyzabxyz') + ' -> ' + /abc?/.exec('xyzabxyz') );        // true -> ab

//范围匹配
console.log( /abc{1}/.test('xyzabccc') + ' -> ' + /abc{1}/.exec('xyzabccc') );    // true -> abc
console.log( /abc{1}/.test('xyzabxyz') + ' -> ' + /abc{1}/.exec('xyzabxyz') );    // false -> null
console.log( /abc{1,}/.test('xyzabccc') + ' -> ' + /abc{1,}/.exec('xyzabccc') );  // true -> abccc
console.log( /abc{1,2}/.test('xyzabccc') + ' -> ' + /abc{1,2}/.exec('xyzabccc') );// true -> abcc

// * + {} 默认情况匹配是贪婪模式(即最多匹配),后面增加 ? 后就使用非贪婪模式匹配(即最少匹配)
console.log( /abc*?/.test('xyzabccc') + ' -> ' + /abc*?/.exec('xyzabccc') );      // true -> ab
console.log( /abc*?/.test('xyzabxyz') + ' -> ' + /abc*?/.exec('xyzabxyz') );      // true -> ab 
console.log( /abc+?/.test('xyzabccc') + ' -> ' + /abc+?/.exec('xyzabccc') );      // true -> abc
console.log( /abc{1,}?/.test('xyzabcc') + ' -> ' + /abc{1,}?/.exec('xyzabcc') );  // true -> abc

//字符串必须以abc开头
console.log( /^abc/.test('abcxyz') + ' -> ' + /^abc/.exec('abcxyz') );            // true -> abc
console.log( /^abc/.test('xyzabc') + ' -> ' + /^abc/.exec('xyzabc') );            // false -> null

//字符串必须以abc结尾
console.log( /abc$/.test('xyzabc') + ' -> ' + /abc$/.exec('xyzabc') );            // true -> abc
console.log( /abc$/.test('abcxyz') + ' -> ' + /abc$/.exec('abcxyz') );            // false -> null

//只检查单词边界,不占匹配位置
console.log( /hello\b/.test('hello world') + ' -> ' + /hello\b/.exec('hello world') );  // true -> hello
console.log( /hello\b/.test('helloworld') + ' -> ' + /hello\b/.exec('helloworld') );    // false -> null
console.log( /hello\B/.test('hello world') + ' -> ' + /hello\B/.exec('hello world') );  // false -> null
console.log( /hello\B/.test('helloworld') + ' -> ' + /hello\B/.exec('helloworld') );    // true -> hello

//正则表达式本身默认为组0,每增加一个捕获组,返回结果中也增加一个结果
console.log( /a(bc)/.test('abcxyz') + ' -> ' + /a(bc)/.exec('abcxyz') );                // true -> abc,bc
console.log( /a(?:bc)/.test('abcxyz') + ' -> ' + /a(?:bc)/.exec('abcxyz') );            // true -> abc

//环视断言只做预查,不向前或向后匹配
console.log( /.+/.test('xyzxyz') + ' -> ' + /.+/.exec('xyzxyz') );                      // true -> xyzxyz
console.log( /(?=[a-z]+).+/.test('xyzxyz') + ' -> ' + /(?=[a-z]+).+/.exec('xyzxyz') );  // true -> xyzxyz
console.log( /(?![a-z]+).+/.test('xyzxyz') + ' -> ' + /(?![a-z]+).+/.exec('xyzxyz') );  // false -> null
console.log( /.+(?<=[a-z]+)/.test('xyzxyz') + ' -> ' + /.+(?<=[a-z]+)/.exec('xyzxyz') );// true -> xyzxyz
console.log( /.+(?<![a-z]+)/.test('xyzxyz') + ' -> ' + /.+(?<![a-z]+)/.exec('xyzxyz') );// false -> null