申明方式, 第二种可以使用变量
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 = '<span id="p1"></span>'
+ '<span id="p2"></span>'
+ '<span id="p3"></span>';
template.replace(
/(<span id=")(.*?)(">)(<\/span>)/g,
function(match, $1, $2, $3, $4){
return $1 + $2 + $3 + prices[$2] + $4;
}
);
// "<span id="p1">$1.99</span><span id="p2">$9.99</span><span id="p3">$5.00</span>"
字面量字符和元字符
- 点字符(.)
点字符(.)匹配除回车(\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,}
- 贪婪模式
+?
*?
??