最近项目中一直要用的正则,并且也不是匹配经常使用的正则规则好比手机号和身份证号之类了,因此就把正则语法看了遍。上篇文章有关于正则的语法和正则在线转换工具。javascript
今天总结下 js中适用于正则匹配的RegExp对象和String对象的方法。(里面的知识点主要是参考于w3c)java
一,先说RegExp对象的方法web
方法名 | 语法 | 参数 | 返回值 | 说明 | 案例 |
test() |
RegExpObject.test(string)
|
string:必需是字符串 |
若是字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,不然返回 false
|
调用 RegExp 对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价的:(r.exec(s) != null)。能够匹配全局
|
var str = "Visit W3School";
var patt1 = new RegExp("W3School");
var result = patt1.test(str); document.write("Result: " + result);
//输出:Result: true
|
exec()
|
RegExpObject.exec(string) |
string:必需是字符串 | 返回一个数组,其中存放匹配的结果。若是未找到匹配,则返回值为 null。 | 1,若是是非全局RegExp对象与返回的数组与调用方法 String.match() 返回的数组是相同的。正则表达式 2,若是是全局RegExp对象的时候它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。exec() 都会把完整的细节添加到它返回的数组中而match不会。因此在循环中反复地调用 exec() 方法是惟一一种得到全局模式的完整模式匹配信息的方法。数组 |
var str = "Visit W3School, W3School is a place to study web technology."; while ((result = patt.exec(str)) != null) { 输出:spa W3School |
compile() | RegExpObject.compile(regexp,modifier) | regexp:正则对象regexp modifier:匹配类型 |
无 | compile() 方法用于在脚本执行过程当中编译正则表达式。 compile() 方法也可用于改变和从新编译正则表达式。 |
var str="Every man in the world! Every woman on earth!"; patt=/man/g; str2=str.replace(patt,"person"); document.write(str2+"<br />"); patt=/(wo)?man/g; str2=str.replace(patt,"person"); document.write(str2); Every person in the world! Every woperson on earth! Every person in the world! Every person on earth! |
二,再说String对象的检测查询方法。这些方法都使用于字符串和正则的匹配
方法名 | 语法 | 参数 | 返回值 | 说明 | 案例 | ||||||||||||
search() | stringObject.search(regexp) | regexp:能够是字符串也能够说RegExp对象 | stringObject 中第一个与 regexp 相匹配的子串的起始位置。若是没有找到任何匹配的子串,则返回 -1。 | search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,而且老是从字符串的开始进行检索,这意味着它老是返回 stringObject 的第一个匹配的位置。 | var str="Visit W3School!" document.write(str.search(/w3school/i)) 输出:6 |
||||||||||||
match() | stringObject.match(searchvalue) stringObject.match(regexp) |
searchvalue:字符串 regexp:正则 |
返回一个数组,其中存放匹配的结果。若是未找到匹配,则返回值为 null。 | 1,非全局RegExp对象match() 方法就只能在 stringObject 中执行一次匹配。若是没有找到任何匹配的文本, match() 将返回 null。不然,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其他的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素以外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。 2,全局RegExp对象match() 方法将执行全局检索,找到 stringObject 中的全部匹配子字符串。若没有找到任何匹配的子串,则返回 null。若是找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中全部的匹配子串,并且也没有 index 属性或 input 属性。 3,在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每一个匹配子串的位置。若是您须要这些全局检索的信息,可使用 RegExp.exec()。若是须要循环对每一个相匹配的内容去作一系列的操做的话就用RegExp.exec()。 |
var str="Hello world!" document.write(str.match("world") + "<br />") document.write(str.match("World") + "<br />") document.write(str.match("worlld") + "<br />") document.write(str.match("world!")) world null null world! |
||||||||||||
replace() | stringObject.replace(regexp/substr,replacement) |
regexp/substr:字符串或者正则对象 replacement:一个字符串值。规定了替换文本或生成替换文本的函数。 |
一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或全部匹配以后获得的。 |
字符串 stringObject 的 replace() 方法执行的是查找并替换的操做。它将在 stringObject 中查找与 regexp 相匹配的子字符串,而后用 replacement 来替换这些子串。若是 regexp 具备全局标志 g,那么 replace() 方法将替换全部匹配的子串。不然,它只替换第一个匹配子串。 replacement 能够是字符串,也能够是函数。若是它是字符串,那么每一个匹配都将由字符串替换。可是 replacement 中的 $ 字符具备特定的含义。以下表所示,它说明从模式匹配获得的字符串将用于替换。
注意:ECMAScript v3 规定,replace() 方法的参数 replacement 能够是函数而不是字符串。在这种状况下,每一个匹配都调用该函数,它返回的字符串将做为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,能够有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 自己。 |
例子 1在本例中,咱们将使用 "W3School" 替换字符串中的 "Microsoft": <script type="text/javascript"> var str="Visit Microsoft!" document.write() </script> str.replace(/Microsoft/, "W3School") 输出: Visit W3School! 例子 2在本例中,咱们将把 "Doe, John" 转换为 "John Doe" 的形式: name = "Doe, John"; name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); 例子 3在本例中,咱们将把字符串中全部单词的首字母都转换为大写: name = 'aaa bbb ccc'; uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );
|
||||||||||||
split() | stringObject.split(separator,howmany) | separator:字符串或正则表达式 howmany:可选。该参数可指定返回的数组的最大长度 |
一个字符串数组 | 注释:若是把空字符串 ("") 用做 separator,那么 stringObject 中的每一个字符之间都会被分割。 注释:String.split() 执行的操做与 Array.join 执行的操做是相反的。 |
例子 1在本例中,咱们将按照不一样的方式来分割字符串: <script type="text/javascript"> var str="How are you doing today?" document.write(str.split(" ") + "<br />") document.write(str.split("") + "<br />") document.write(str.split(" ",3)) </script> 输出: How,are,you,doing,today? H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,? How,are,you 例子 2在本例中,咱们将分割结构更为复杂的字符串: "2:3:4:5".split(":") //将返回["2", "3", "4", "5"] "|a|b|c".split("|") //将返回["", "a", "b", "c"] 例子 3使用下面的代码,能够把句子分割成单词: var words = sentence.split(' ') 或者使用正则表达式做为 separator: var words = sentence.split(/\s+/) |