var osVersion = "Ubuntu 8";//其中的8表示系统主版本号
var re = /^[a-z]+\s+\d+$/i; //+号表示字符至少要出现1次,\s表示空白字符,\d表示一个数字
alert(re.test(osVersion));//true,但我们想知道主版本号
//另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容
re=https://www.jb51.net/^[a-z]+\s+\d+$/i;
arr = re.exec(osVersion);
alert(arr[0]);//将osVersion完整输出,因为整个字符串刚好匹配re
//我只需要取出数字
re=https://www.jb51.net/\d+/;
var arr = re.exec(osVersion);
alert(arr[0]);//8
更复杂的用法,使用子匹配
复制代码 代码如下:
//exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配
re=https://www.jb51.net/^[a-z]+\s+(\d+)$/i;//用()来创建子匹配
arr =re.exec(osVersion);
alert(arr[0]);//整个osVersion,也就是正则表达式的完整匹配
alert(arr[1]);//8,第一个子匹配,事实也可以这样取出主版本号
alert(arr.length);//2
osVersion = "Ubuntu 8.10";//取出主版本号和次版本号
re = /^[a-z]+\s+(\d+)\.(\d+)$/i;//.是正则表达式元字符之一,若要用它的字面意义须转义
arr = re.exec(osVersion);
alert(arr[0]);//完整的osVersion
alert(arr[1]);//8
alert(arr[2]);//10
注意,当字符串不匹配re时,exec方法将返回null
String对象的一些和正则表达式有关的方法
复制代码 代码如下:
//replace方法,用于替换字符串
var str ="some money";
alert(str.replace("some","much"));//much money
//replace的第一个参数可以为正则表达式
var re = /\s/;//空白字符
alert(str.replace(re,"%"));//some%money
//在不知道字符串中有多少空白字符时,正则表达式极为方便
str ="some some \tsome\t\f";
re = /\s+/;
alert(str.replace(re,"#"));//但这样只会将第一次出现的一堆空白字符替换掉
//因为一个正则表达式只能进行一次匹配,\s+匹配了第一个空格后就退出了
re = /\s+/g;//g,全局标志,将使正则表达式匹配整个字符串
alert(str.replace(re,"@"));//some@some@some@
var str = "ADF9DF9DF9", //那个文本文件中的字符串;
re = /9/gi, //匹配9
counter = 0; //计数器 var newstr =
str = str.replace(re, function() {
counter++; //每出现一次匹配,函数就被执行一次,函数的返回值用来替换原值
return "#";
});
alert("替换次数: "+counter);
//alert(str);
//最后str 变成 ADF#DF#DF#"
var str = "他今年22岁,她今年20岁,他的爸爸今年45岁,她的爸爸今年44岁,一共有4人"
function test($1) {
var gyear = (new Date()).getYear() - parseInt($1) + 1;
return $1 + "(" + gyear + "年出生)";
}
// var reg = new RegExp("(://d/+)岁", "g");
var reg = /(\d+)岁/gi;
var newstr = str.replace(reg, test);
//alert(str);
//alert(newstr);
//另一个与之相似的是split
var str = "a-bd-c";
var arr = str.split("-");//返回["a","bd","c"]
//如果str是用户输入的,他可能输入a-bd-c也可能输入a bd c或a_bd_c,但不会是abdc(这样就说他输错了)
str = "a_db-c";//用户以他喜欢的方式加分隔符s
re=https://www.jb51.net/[^a-z]/i;//前面我们说^表示字符开始,但在[]里它表示一个负字符集
//匹配任何不在指定范围内的任意字符,这里将匹配除字母处的所有字符
arr = str.split(re);//仍返回["a","bd","c"];
//在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search
str = "My age is 18.Golden age!";//年龄不是一定的,我们用indexOf不能查找它的位置
re = /\d+/;
alert(str.search(re));//返回查找到的字符串开始下标10
//注意,因为查找本身就是出现第一次就立即返回,所以无需在search时使用g标志
//下面的代码虽然不出错,但g标志是多余的
re=https://www.jb51.net/\d+/g;
alert(str.search(re));//仍然是10
类似于exec方法,String对象的match方法也用于将字符串与正则表达式进行匹配并返回结果数组
复制代码 代码如下:
var str = "My name is CJ.Hello everyone!";
var re = /[A-Z]/;//匹配所有大写字母
var arr = str.match(re);//返回数组
alert(arr);//数组中只会包含一个M,因为我们没有使用全局匹配
re = /[A-Z]/g;
arr = str.match(re);
alert(arr);//M,C,J,H
//从字符串中抽取单词
re = /\b[a-z]*\b/gi;//\b表示单词边界
str = "one two three four";
alert(str.match(re));//one,two,three,four
RegExp对象实例的一些属性
复制代码 代码如下: