定义正则表达式:
方法包括:构造法和直接量
1.构造正则表达式
RegExp构造函数定义正则表达式:
new RegExp(pattern,attributes);
pattern:字符串–>指定了正则表达式的模式或其他正则表达式,
attributes:是一个可选的修饰符标志,包含’g’、‘i’、'm’分别用于指定全局匹配、区分大小写的匹配和多行匹配。
注意:
如果pattern是正则表达式,而不是字符串,则必须省略该参数。
该函数将返回一个新的RegExp对象,具有指定的模式和标志。
var regex=new RegExp(/表达式/);
//或者
var regex=new RegExp("表达式");
Demo1:
var r=new RegExp('a'); //构造最简单的正则表达式 匹配模式为字符a
var s="javascript!=java";//字符串直接量
var a=s.match(r);//返回['a']
console.log(a);
console.log(a.index);
如果希望匹配字符串中的所有字符a,且不区分大小写,则可以在第二个参数中增加g和i修饰符.
var r=new RegExp('a','gi');
2.正则表达式直接量:
使用双斜杠作为分隔符进行定义,双斜杠之间包含的字符为正则表达式的字符模式,字符模式不能使用引号,标志字符放在最后一个斜杠的后面。
/patten/attributes
如:
var r=/\b\w/gi;//匹配单词的边界,不区分大小写
var s="javascript JAVA";
var a=s.match(r);
console.log(a);//返回数组 ["j","J"]
JavaScript正则表达式支持"g"、“i”、“m” 这3个标志修饰符.
“g”:global(全局)的缩写,定义全局匹配,即正则表达式将在指定的字符串范围内执行所有匹配
“i”:定义不区分大小写的匹配,即对于字母大小写视为等同。
“m”:multiline的缩写,定义多行字符串匹配。
正则表达式的组成:
边界符:
边界就是确定匹配模式的位置,如字符串的头部或尾部。
量词 说明
^ 匹配开头,在多行检测中,会匹配一行的开头
$ 匹配结尾,在多行检测中,会匹配一行的结尾
Demo:
// '^':匹配行首开始(以什么开头)
var reg=/^123/;//匹配以123开头的字符
console.log(reg.test("hrusj123"));
console.log(reg.test("123saaiu"));
var str="123str8956";
str=str.replace(reg,'');
console.log(str);
//'$':匹配行尾结束(以什么结束)
var text="baidu.com";
var r=/.com$/;//以'.com'结尾
var name=text.replace(r,'');
console.log("name:"+name);
var singleRegex=/^demo$/;//精确匹配,表示匹配的数据是单独存在的 demo字符串才符合规范
console.log(singleRegex.test("demotest"));//false
console.log(singleRegex.test("testdemotest"));//false
console.log(singleRegex.test("demotest"));//false
console.log(singleRegex.test("demo"));//true
重复类量词:
量词 描述
n+ 匹配任何包含至少一个n的字符串
n* 匹配任何包含零个或多个n的字符串
n? 匹配任何包含零个或一个n的字符串
n{x} 匹配包含x个n的序列的字符串
n{x,y} 匹配包含x或y个n的序列的字符串
n{x,} 匹配至少包含x个n的序列的字符串
Demo:
var rgx1=/^a$/;
console.log(rgx1.test('a'));
console.log('-----------------------------2');
//'*': 出现次数:>=0次
var rgx2=/^a*$/;
console.log(rgx2.test(''));
console.log(rgx2.test('a'));
console.log(rgx2.test('aaaaa'));
console.log('-----------------------------3');
//'+'号:出现次数>=1 次
var rgx3=/^a+$/;
console.log(rgx3.test(''));
console.log(rgx3.test('a'));
console.log(rgx3.test('aa'));
console.log(rgx3.test('aaaaa'));
console.log('-----------------------------4');
//‘?’ 号:出现0次或1次
var rgx4=/^a?$/;
console.log(rgx4.test(''));
console.log(rgx4.test('a'));
console.log(rgx4.test('aa'));
console.log(rgx4.test('aaaaa'));
console.log('-----------------------------5');
//{n}:要出现n次
var rgx5=/^a{3}$/;
console.log(rgx5.test('a'));
console.log(rgx5.test('aa'));
console.log(rgx5.test('aaaaa'));
console.log('-----------------------------6');
//{n,}:要出现>=n次
var rgx6=/^a{3,}$/;
console.log(rgx6.test('a'));
console.log(rgx6.test('aa'));
console.log(rgx6.test('aaa'));
console.log(rgx6.test('aaaaa'));
console.log('-----------------------------6');
//{n,m}:要出现 n~m次
var rgx6=/^a{3,16}$/;
console.log(rgx6.test('aa'));
console.log(rgx6.test('aaa'));
console.log(rgx6.test('aaaaaa'));
console.log(rgx6.test('aaaaaaaaaaaaaaa'));
console.log(rgx6.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'));
Demo 3:
//量词是用来限定某种模式出现的次数
var regex=/^[a-zA-Z0-9_-]{6,16}$/;//这个模式只能出现大小写英文字母、数字、下划线、短横线
//添加量词符{n,m},可以指定组合匹配的出现次数
console.log(regex.test('a'));
console.log(regex.test('jia5'));
console.log(regex.test('jiao7060158'));
预定义类:
Demo:
var regex1=/^\d{3,9}$/;
var regex2=/^\w{6,16}$/;
var spaceRegex=/\s/;//匹配空格
console.log(spaceRegex.test('test'));
//去掉字符串中的所有空格
var strData=" you are my super star! yes! so nice ";
console.log(strData.replace(/(^\s*)|(\s*$)/g,'').replace(/\s/g,''));