关于正则匹配问题
(1) *:匹配前面的子表达式0次或多次。
例如:以下都将返回b,也就是说不管z后面有多少个连续的“o”,都将匹配 也就是相当于* 等价于{0,}
var str = "z".replace(/zo*/,"b"); var str1 = "zo".replace(/zo*/,"b"); var str2 = "zoo".replace(/zo*/,"b"); var str3 = "zooo".replace(/zo*/,"b"); alert(str); //b alert(str1); //b alert(str2); //b alert(str3); //b
数字的用法,[0-9] 代表所有数字;就是说可以匹配连续的数字
var str = "123456"; var newstr = str.replace(/[0-9]*/,"www");
alert(newstr); //www
不是连续的,将返回连续的部分
var str = "1234b56"; var newstr = str.replace(/[0-9]*/, "www"); alert(newstr); //wwwb56
(2)+:匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
和 “ * ” 同理,但是必须要至少有一个匹配项
(3)? : 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
var str = "do"; var str1 = "does"; var str2 = "doessdafasdf"; var newstr = str.replace(/do(es)?/, "www"); var newstr1 = str1.replace(/do(es)?/, "www"); var newstr2 = str2.replace(/do(es)?/, "www"); alert(newstr); //www alert(newstr1); //www alert(newstr2); //wwwsdafasdf
(4) {n}:n 是一个非负整数。匹配确定的 n 次。
例如:'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
var str = "Bob"; var str1 = "Boob"; var str2 = "Booob"; var newstr = str.replace(/o{2}/, "www"); var newstr1 = str1.replace(/o{2}/, "www"); var newstr2 = str2.replace(/o{3}/, "www"); alert(newstr); //Bob alert(newstr1); //Bwwwb alert(newstr2); //Bwwwb
数字的应用
var str = "12345"; var newstr = str.replace(/[0-9]{3}/,"www"); alert(newstr); //www45
(5){n,}:n 是一个非负整数。至少匹配n 次。
例如: 'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'
var str = "Bob"; var str1 = "Boob"; var str2 = "Booob"; var newstr = str.replace(/o{1,}/, "www"); var newstr1 = str1.replace(/o{1,}/, "www"); var newstr2 = str2.replace(/o{1,}/, "www"); alert(newstr); //Bwwwb alert(newstr1); //Bwwwb alert(newstr2); //Bwwwb
(6){n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
原理同上,只是m 限制了要匹配的最大次数