一:多行匹配
很多时候我们可以通过边界符号(^,$,,B)达到我们匹配某些字符串的目的。但是如果字符串有多行呢,这个其实很简单了,只需加个m就指定为多行匹配了。实例:
var str = "first second third fourth fifth sixth";
var patt = /(w+)$/gm
console.log(str.match(patt));
结果:
["second", "fourth", "sixth"]
如果没有指定m,则只会得到sixth了,加了m后实际上正则表达式是把
、
这些也换行和回车当成边界了,可以这么理解
var str2 = "first second third fourth fifth sixth";
var patt2 = /^(w+)/gm
console.log(str2.match(patt2 ));
结果:
["first", "third", "fifth"]
没指定m则只能是first了
二:RegExp理解
RegExp有很多属性:
-
global 表示全局g是否设置
-
ignoreCase 表示i忽略大小是否设置
-
lastIndex 表示下次匹配将会从哪个位置开始(只有用了test,exec,match这些方法后才会有值,否则为0)
- multiline 表示多行m是否设置
- source 表示正则表达式的源字符串形式
这些属性基本都不用,因为一看就知道了。可能有点用的是lastIndex这个属性了。我们可以控制这个去匹配我们想要匹配的字符串。
还有一些静态属性:
-
长名 短名 描述 input $_ 最后匹配的字符串 lastMatch $& 最后匹配的字符 lastParem $+ 最后匹配的分组 leftContent $` 上次匹配的前面的子串 rightContent $' 上次匹配的后面的子串
实例:
var str = "this has been a short,short summer";
var patt = /(s)hort/g
console.log(str.match(patt));
console.log(RegExp.input);
console.log(RegExp.lastMatch);
console.log(RegExp.lastParen);
console.log(RegExp.leftContext);
console.log(RegExp.rightContext);
当然也可以使用那些短名的
结果:
["short", "short"]
this has been a short,short summer
short
s
this has been a short,
summer