peterwzc 2020-03-17
原创,转载请注明出处
正则表达式是个好东西,可以很快的得到你想要查找的东西。
javascript 正则表达式 和 java perl 等的有些不一样,比如没有后向预查等。下面说一下 js中正则表达式的常用用法。
RegExp 对象有方法: exec ,test
js 中字符串对象 String 具有如下正则表达式方法:match ,replace , search , split
String 的 match 方法 和 RegExp 的exec 方法相似。都返回匹配的信息。不过不能得到匹配的位置。
eg:
var reg=new RegExp('\\<(\\w+)\\>','g');
var str="fsd<abc>f<cdd><fods><foire<fdso<forg>";
var match=str.match(reg);
返回的match 是一个一维数组,这里match 是整个字符串 str 中所有匹配: <abc>,<cdd>,<fods>,<forg>,因为reg对象加了全局标志:g。
如果不加 g ,则match 将返回为第一次的匹配的数组:<abc>,abc。即如果加了全局g标志,正则表达式的分组信息将丢失。如果要找出所有的具体到哪组的内容参见 RegExp 的 exec 方法(如要查找出所有包含在<>中的内容)。
String 的 replace 方法 ,这个方法如果要如果要使用正则表达式方式替换,则替换因子需要为RegExp对象:
如: "fds<abc>fd<cc>".replace(/\\<\\w+\\>/,''); 这个式子用于将包含在<> 中的内容以及<> 本身删除掉。注意这里的/\\<\\w+\\>/ 它就是一个 RegExp 对象。这是一种特殊的构造方式。并且注意这里的正则表达式不需要像用字符串构造RegExp 对象那样对 \ " ' 等转义。比如 /" \d" / 这个就需要这样构造RegExp:new RegExp("\" \\d\" ");因为这些符号在字符串表示时有特殊意义。
String 的 split 方法 ,split 方法与 replace 一样。
Strng 的 search 方法 ,这个方法查找匹配的字符串在字符串中的开始位置:
如:"ab<abc>fds<fds>fd".search(/\\<\\w+\\>/) 返回 2 。
RegExp 的 exec 方法,该方法查找匹配的字符串,如果要查找全部,则可以使用标志g。
如:
var reg=new RegExp("\\<\\w+\\>","g");
var str="fsd<abc>f<cdd><fods><foire<fdso<forg>";
var match=reg.exec(str);
while(match){
alert(match[1]);
match = reg.exec(str);
}
这样既可循环打印出 包含在 <> 中的内容。如果regexp对象使用了标志g ,则每次调用 exec 或者 test 方法,都会在 lastIndex 中保存匹配的位置,下次匹配将从此位置开始,不会再去匹配匹配过的内容。当exec或者test 方法找不到匹配的内容后,会将 lastIndex 归零,并返回 null。lastIndex 也可以手动设置。归零后匹配又将从字符串开始匹配。如果不使用 g 全局标志,每次匹配都将从字符串的开始位置匹配。
RegExp 的 test 方法,这个方法返回一个 布尔值,表示 是否能查找到 正则表达式所表示的内容,能则返回true,否则返回 false 。
另外注意,/\d+/ 也是js正则表达式对象,是简写。不过您是否注意到 \d+ 的写法,而不是 \\d+ ,/xxx/ 的写法是 \无需转义为 \\d ,不过new RegExp 的形式需要: var reg = new RegExp("\\d+");