【标准库】RegExp

申明方式, 第二种可以使用变量

var regex = /xyz/;
var regex = new RegExp('xyz', i);

var reg = 'xyz';
var regex = new RegExp(reg);
  • 在匹配的时候 会记住上次的lastIndex所以匹配的时候不应该更改所要匹配的字符串
var r = /bb/g;
r.test('bb') // true
r.test('-bb-') // false
new RegExp('').test('abc')
  • exec() 用来返回匹配结果,匹配成功,返回一个数组,失败返回null
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;

r1.exec(s) // ["x"]
r2.exec(s) // null
  • String.prototype.match() lastIndex 属性无效
  • String.prototype.search() 返回第一个满足的位置,没有返回-1
  • String.prototype.replace()
替换字符
$&  指代匹配的字符串
$`   匹配结果之前all
$'   匹配结果之后all
'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
// "world hello"

'abc'.replace('b', '[$`-$&-$\']')
// "a[a-b-c]c"

第二个参数是 函数

var a = 'The quick brown fox jumped over the lazy dog.';
var pattern = /quick|brown|lazy/ig;

a.replace(pattern, function replacer(match) {
  return match.toUpperCase();
});

捕捉模式 替换模板

var prices = {
  'p1': '$1.99',
  'p2': '$9.99',
  'p3': '$5.00'
};

var template = ''
  + ''
  + '';

template.replace(
  /()(<\/span>)/g,
  function(match, $1, $2, $3, $4){
    return $1 + $2 + $3 + prices[$2] + $4;
  }
);
// "$1.99$9.99$5.00"

字面量字符和元字符

  • 点字符(.)
    点字符(.)匹配除回车(\r)、换行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符
  • 位置符
    ^ $ 开始 结束
  • 选择符|
/11|22/.test('911') // true
  • [] && [^]
    如果方括号里面没有其他字符,只有[^] 就表示匹配一起字符,而点号(.)不包括换行回车这些
/[abc]/.test('hello world') // false
/[abc]/.test('apple') // true
/[^abc]/.test('bbc') // false

var s = 'Please yes\nmake my day!';

s.match(/yes.*day/) // null
s.match(/yes[^]*day/) // [ 'yes\nmake my day']
  • [-] 可选连字符
  • 预定义模式
\d 匹配0-9之间的任一数字,相当于[0-9]。
\D 匹配所有0-9以外的字符,相当于[^0-9]。
\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。
\W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。
\s 匹配空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相当于[^ \t\r\n\v\f]。
\b 匹配词的边界。
\B 匹配非词边界,即在词的内部。
  • {n,m} 表示匹配次数,n到m次,{n,m}表示重复不少于n次,不多于m次。
? 表示出现0 到1次 等同`{0,1}`
* 表示0到多次,等同于{0,}
+ 表示1到多次,等同于{1,}
  • 贪婪模式 +? *? ??

你可能感兴趣的:(【标准库】RegExp)