正则表达式概念及语法
正则表达式是遗传用于定义某种模式的字符,属于字符串范畴,有原义字符和元字符两种字符组成。
1.原义字符:书写在正则表达式中表示为字面意思的字符
2.元字符:书写在正则表达式中表示为特定的含义的字符
基本元字符、范围元字符、重复元字符、转义元字符、贪婪匹配,和后向引用。
RegExp 对象方法
test()
test() 方法检索字符串中是否存在指定的值。返回值是 true 或 false。
1.var patt1 = new RegExp('e');
2.console.log(patt1.test('some text'));
3.// OUTPUT:true
4.var patt2 = new RegExp('ee');
5.console.log(patt2.test('some text'));
6.// OUTPUT:false
1.// 判断是不是QQ号
2.// 1 首位不能是0 ^[1-9]
3.// 2 必须是 [5, 11] 位的数字 \d{4, 9}
4.var str = '80583600';
5.var regexp = /^[1-9][0-9]{4,10}$/gim;
6.if (regexp.test(str)) {
7. alert('is');
8.} else {
9. alert('no');
10.}
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
1.var patt1 = new RegExp('e');
2.console.log(patt1.exec('some text'));
3.// OUTPUT:e
4.var patt2 = new RegExp('ee');
5.console.log(patt2.exec('some text'));
6.// OUTPUT:null
compile()
compile() 既可以改变检索模式,也可以添加或删除第二个参数
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free")); // true
// 改变了检索模式
patt1.compile("eee");
document.write(patt1.test("The best things in life are free")); // false
支持正则表达式的 String 对象的方法
search 检索与正则表达式相匹配的值。
1.var str = "Visit W3School!"
2.console.log(str.search(/W3School/))
3.// OUTPUT:6
match 找到一个或多个正则表达式的匹配。
var str="1 plus 2 equal 3"
console.log(str.match(/\d+/g))
// OUTPUT:1,2,3
replace 替换与正则表达式匹配的子串。
1.var str = "Visit Microsoft!"
2.console.log(str.replace(/Microsoft/, "W3School"));
3.// OUTPUT:Visit W3School!
基本元字符:
1、. 匹配任意字符。
2、* 匹配前一个字符出现的次数为0次或多次。
3、? 匹配前一个字符出现的次数为0次或1次。
4、+ 匹配前一个字符出现的次数为1次或多次。
5、^ 匹配以后面的字符开头。
6、$ 匹配以前面的字符结尾。
7、| 匹配|两端出现的字符中的任意一个,表示“或”的意思。
1、利用字面量创建正则表达式:
var reg=/abc/;
2、利用构造函数创建正则表达式:
var reg=new RegExp(“abc”);
3、创建正则表达式时可以为正则表达式添加修饰符:
(1)g,表示全局匹配。
(2)i,表示忽略大小写。
例如:利用字面量创建正则表达式。
var reg=/a./gi;
var str='abcdaefgawdA9fa3eweaa';
例如:利用构造函数创建正则表达式。
var reg=new RegExp("a.","gi");
var str='abcdaefgawdA9fa3eweaa';
**与正则表达式有关的字符串方法:**
1、match(reg):
功能:返回字符串匹配正则表达式reg的子串内容。
该功能返回的是一个长得像数组的对象(只匹配第一个子串)或数组(全局匹配)。
例如:match()返回下列格式。
["ab", index: 0, input: "abcdaefgawdA9fa3eweaa", groups: undefined]
索引值为0的元素是匹配正则表达式的唯一结果。
index:返回匹配正则表达式的子串的索引值。
input:返回源字符串。
groups:返回正则表达式的分组结果。
结论:凡是利用match()返回的匹配结果都要带下标。
若字符串没有匹配reg的子串,则返回null。
2、search(reg):
功能:返回字符串匹配正则表达式reg的子串位置。
该功能返回的是一个索引值。
若字符串没有匹配reg的子串,则返回-1。
3、replace():
例1:匹配全部都是由原义字符组成的正则表达式。
var reg=/abc/;
var str='今天我学习了abc';
var a=str.match(reg);
var b=str.search(reg);
console.log(a,b);
例2:第一个元字符(.)。
var reg=/a./;
var str='abcdefg';
var a=str.match(reg);
var b=str.search(reg);
console.log(a,b);
例3:第二个元字符(* ? +)
var str='banana';
var reg1=/an+/; //以a开头,字符n出现了1次或多次的子串
var reg2=/(an)+/; //字符an出现了1次或多次的子串
var a=str.match(reg1); //an
var b=str.match(reg2); //anan
console.log(a,b);