正则表达式是对字符串操作的一种逻辑公式;作用:检索、替换那些符合某个模式(规则)的文本,可以通过一些设定的规则来匹配一些字符串,是一个强大的字符串匹配工具。
正则表达式,又称规则表达式。(英语:regular expression,在代码中常简写为regex、regexp或re),计算机科学的一个概念。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的作用
正则表达式可以用来检索、替换那些符合某个模式(规则)的文本;可以通过一些设定的规则来匹配一些字符串,是一个强大的字符串匹配工具。
正则表达式方法
基本语法,正则声明
js中,正则的声明有两种方式
1、直接量语法:
var reg = /d+/g/
2、创建regexp对象的语法
var reg = new regexp("\\d+", "g");
这两种声明方式其实还是有区别的,平时的话我比较喜欢第一种,方便一点,如果需要给正则表达式传递参数的话,那么只能用第二种创建regexp的形式
格式:
var pattern = new regexp('regexp','modifier');
regexp: 匹配的模式,也就是上文指的正则规则。
modifier: 正则实例的修饰符,可选值有:
i : 表示区分大小写字母匹配。
m :表示多行匹配。
g : 表示全局匹配。
传参的形式如下:
我们用构造函数来生成正则表达式
var re = new regexp("^\\d+$","gim");
这里需要注意,反斜杠需要转义,所以,直接声明量中的语法为\d,这里需要为 \\d
那么,给它加变量,就和我们前面写的给字符串加变量一样了。
var v = "bl";var re =new regexp("^\\d+" + v + "$","gim"); // re为/^\d+bl$/gim
支持正则的string对象方法
1、search 方法
作用: 该方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的字符串
基本语法: stringobject.search(regexp);
返回值: 该字符串中第一个与regexp对象相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1;
注意点: search()方法不执行全局匹配,它将忽略标志g,
var str = "hello world,hello world";// 返回匹配到的第一个位置(使用的regexp对象检索)console.log(str.search(/hello/)); // 0// 没有全局的概念 总是返回匹配到的第一个位置console.log(str.search(/hello/g)); //0 console.log(str.search(/world/)); // 6 // 如果没有检索到的话,则返回-1console.log(str.search(/longen/)); // -1 // 我们检索的时候 可以忽略大小写来检索var str2 = "hello";console.log(str2.search(/hello/i)); // 0
2、match()方法
作用: 该方法用于在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配。类似于indexof()或者lastindexof();
基本语法: stringobject.match(searchvalue) 或者stringobject.match(regexp)
返回值:
存放匹配成功的数组; 它可以全局匹配模式,全局匹配的话,它返回的是一个数组。如果没有找到任何的一个匹配,那么它将返回的是null;
返回的数组内有三个元素,第一个元素的存放的是匹配的文本,还有二个对象属性
index属性表明的是匹配文本的起始字符在stringobject中的位置,input属性声明的是对stringobject对象的引用
var str = "hello world";console.log(str.match("hello")); // ["hello", index: 0, input: "hello world"]console.log(str.match("helloy")); // nullconsole.log(str.match(/hello/)); // ["hello", index: 0, input: "hello world"]// 全局匹配var str2="1 plus 2 equal 3"console.log(str2.match(/\d+/g)); //["1", "2", "3"]
3、replace()方法
作用: 该方法用于在字符串中使用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子字符串;
基本用法: stringobject.replace(regexp/substr,replacement);
返回值: 返回替换后的新字符串
注意: 字符串的stringobject的replace()方法执行的是查找和替换操作,替换的模式有2种,既可以是字符串,也可以是正则匹配模式,如果是正则匹配模式的话,那么它可以加修饰符g,代表全局替换,否则的话,它只替换第一个匹配的字符串;
replacement 既可以是字符串,也可以是函数,如果它是字符串的话,那么匹配的将与字符串替换,replacement中的$有具体的含义,如下:
$1,$2,$3….$99 含义是:与regexp中的第1到第99个子表达式相匹配的文本。可以看下面的例子
$& 的含义是:与regexp相匹配的子字符串。
lastmatch或regexp[“$_”]的含义是:返回任何正则表达式搜索过程中的最后匹配的字符。
lastparen或 regexp[“$+”]的含义是:返回任何正则表达式查找过程中最后括号的子匹配。
leftcontext或regexp[“$`”]的含义是:返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。
rightcontext或regexp[“$’”]的含义是:返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
var str = "hello world";// 替换字符串var s1 = str.replace("hello","a");console.log(s1);// a world// 使用正则替换字符串var s2 = str.replace(/hello/,"b");console.log(s2); // b world // 使用正则全局替换 字符串var s3 = str.replace(/l/g,'');console.log(s3); // heo word // $1,$2 代表的是第一个和第二个子表达式相匹配的文本// 子表达式需要使用小括号括起来,代表的含义是分组var name = "longen,yunxi";var s4 = name.replace(/(\w+)\s*,\s*(\w+)/,"$2 $1");console.log(s4); // "yunxi,longen" var str = '123-mm';var strreg = str.replace(/(\d+)-([a-za-z]+)/g,'$2');console.log(strreg)//mm 上面那段$2这个就是表示正则第二组个匹配到的内容,也就是说$1,$2.. 表示的是第几个括号匹配到的内容 // $& 是与regexp相匹配的子字符串var name = "hello i am a chinese people";var regexp = /am/g;if(regexp.test(name)) {//返回正则表达式匹配项的字符串console.log(regexp['$&']); // am //返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。console.log(regexp["$'"]); // a chinese people //返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。console.log(regexp['$`']); // hello i // 返回任何正则表达式查找过程中最后括号的子匹配。console.log(regexp['$+']); // 空字符串 //返回任何正则表达式搜索过程中的最后匹配的字符。console.log(regexp['$_']); // hello i am a chinese people} // replace 第二个参数也可以是一个function 函数var name2 = "123sdasadsr44565dffghg987gff33234";name2.replace(/\d+/g,function(v){console.log(v);// 第一次打印123// 第二次打印44565// 第三次打印987// 第四次打印 33234});
regexp对象方法
test()方法
作用: 该方法用于检测一个字符串是否匹配某个模式;
基本语法: regexpobject.test(str);
返回: 返回true,否则返回false;
var str = "longen and yunxi";console.log(/longen/.test(str)); // trueconsole.log(/longlong/.test(str)); //false // 或者创建regexp对象模式var regexp = new regexp("longen");console.log(regexp.test(str)); // true
exec()方法
作用: 该方法用于检索字符串中的正则表达式的匹配
基本语法: regexpobject.exec(string)
返回值: 返回一个数组,存放匹配的结果,如果未找到匹配,则返回值为null;
注意点: 该返回的数组的第一个元素是与正则表达式相匹配的文本
该方法还返回2个属性,index属性声明的是匹配文本的第一个字符的位置;input属性则存放的是被检索的字符串string;该方法如果不是全局的话,返回的数组与match()方法返回的数组是相同的。
var str = "longen and yunxi";console.log(/longen/.exec(str));// 打印 ["longen", index: 0, input: "longen and yunxi"] // 假如没有找到的话,则返回nullconsole.log(/wo/.exec(str)); // null
更多相关知识,请访问 !!