JavaScript通过RegExp类来支持正则表达式,举一个最简单的例子:
创新互联公司专业为企业提供永修网站建设、永修做网站、永修网站设计、永修网站制作等企业网站建设、网页设计与制作、永修企业网站模板建站服务,10年永修做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
复制代码
代码如下:
var
regApple
=
new
RegExp("apple");
它可以匹配一个字符串中出现的第一个"apple"字符串,并且对大小写敏感。在构造方法中加入第二个参数"g"则代表的搜索出字符串中所有的
"apple",这里"g"代表"global"。如果第二个参数为"i",则代表着case-insensitive,匹配过程中将不考虑字母的大小写。将上述两者综合起来,可以搜索出所有"apple"字符串,并且不考虑大小写问题。
复制代码
代码如下:
var
regApple
=
new
RegExp("apple",
"gi");
正则表达式有着并不唯一的表示方法,使用Perl语言中的语法,可以将上述表达式表示为:
复制代码
代码如下:
var
regApple
=
/apple/gi;
创建了一个RegExp对象后,RegExp的方法可以构造出不同的匹配方式,因为正则表达式是对字符串进行的操作,所以String的一些方法在构造正则表达式的过程中也扮演着重要角色。
RegExp对象的方法
复制代码
代码如下:
var
sampleString
=
"Greenapple";
var
regApple
=
/apple/;
alert(regApple.test(sampleString));
上面代码输出的结果是"true",因为sampleString中包含了需要匹配的字符串"apple",这是最简单的检测方式。有时,我们需要知道匹配的详细结果,例如:
复制代码
代码如下:
var
sampleString
=
"green
apples,
red
apples";
var
regApple
=
/apple/g;
var
arr
=
regApple.exec(sampleString);
通过使用exec()方法,返回的arr是关于匹配结果的一个数组,包括每一个匹配的值及其所在的段,例如上例中是"green
apples"还是"red
apples"。match()方法有着和exec()相同的功能,只是表达方式不同:
复制代码
代码如下:
var
sampleString
=
"green
apples,
red
apples";
var
regApple
=
/apple/g;
var
arr
=
sampleString.match(regApple);
search()方法和indexOf()比较类似,返回第一个匹配的字符串所在的位置:
复制代码
代码如下:
var
sampleString
=
"green
apples,
red
apples";
var
regApple
=
/apple/gi;
alert(sampleString.search(regApple));
//输出"6"
String的方法
String的replace()方法可以将指定的字符串替换为另一个字符串:
复制代码
代码如下:
var
sampleString
=
"There
is
a
green
apple.";
alert(sampleString.replace("green",
"red"));
//输出"There
is
a
red
apple."
将replace()的第一个参数替换为一个正则表达式,可以达到同样的效果:
复制代码
代码如下:
var
sampleString
=
"There
is
a
green
apple.";
var
regApple
=
/apple/;
alert(sampleString.replace(regApple,
"red"));
//输出"There
is
a
red
apple."
replace()的第二个参数可以替换为一个function(),该function()接受一个匹配字符串作为参数,返回一个替换字符串。(存在疑问)
使用正则表达式可以实现String的split()方法相同的功能。
复制代码
代码如下:
var
fruit
=
"apple,pear,lemon";
var
arr
=
fruit.split(",");
使用正则表达式:
复制代码
代码如下:
var
fruit
=
"apple,pear,lemon";
var
reg
=
/\,/;
var
arr
=
fruit.split(reg);
javascript函数表达式有存在的必要的。
在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示:
var test = function(x){
return x;
}
function test(x){
return x;
}
尽管函数定义表达式和函数声明语句包含相同的函数名,并且都创建了新的函数对象,但是这二者却有区别。
函数声明语句中的函数名是一个变量名,变量指向函数对象。
函数定义表达式和通过var声明变量一样,其函数被提前到了脚本或函数的顶部,因此它在整个脚本和或函数内都是可见的。这样的话,只有函数变量声明提前了,函数的初始化代码仍然在原来的位置。但是使用函数声明的话,函数名称和函数体均提前了,即脚本中的函数和函数中嵌套的函数都会在当前上下文中其它代码之前声明,也即可以在声明一个函数之前调用它。
举个例子:
test(1);
function test(x){
console.log(x);
}
上述代码能正常执行,结果输出为1;因为对于函数声明语句,函数名称和函数体均提前声明了,可以在声明之前调用它。
test(1);
var test = function(x){
console.log(x);
}
上述代码不能正常执行,会报错。
因为对于函数定义表达式,只有函数变量声明提前了,但是函数的初始化代码仍然在原来的位置,也即相当于如下的代码
var test; //函数变量声明提前
test(1);
var test = function(x){
console.log(x);
}
因此,会报错test不是一个函数的错误。
1.什么 是正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
正则表达式并不是属于某种语言的,它是一门独立的语言,几乎在所有的编程语言中都提供了相关支持(Javascript、PHP、Java、C++)
以SQL语言为例:搜索功能
精准匹配:
\$sql = “select * from goods where title=’Nokia N95’”; //返回某个固定的结果
模糊匹配:
\$sql = “select * from goods where title like ‘%Nokia N95%’”; //返回某种满足条件的结果
所以由此可知,正则表达式也是一种模糊匹配。
2.正则 表达式应用场景
① 数据隐藏 李先生 一等奖 139****635
② 数据验证 手机验证、邮箱验证、IP地址验证
③ 数据采集 网站后台都可以集成一个按钮(数据采集)
④ 数据检索
3.快速入门
1)查找一个字符串中是否具有数字“8”
运行结果:
2)查找一个字符串中是否具有数字
运行结果:
3)查找一个字符串中是否具有非数字
运行结果:
这是Javascript语言正则表达式中的反向引用,就是\1引用前面小括号中捕获组的数据(,),因为只有一个小括号(一个捕获组),所以第一个正则表达式\1是对的
第二个正则表达式/apple(,5)orange\2/ 因为只有一个捕获组,而引用的\2是指引用第二捕获组,没有第二捕获组,所以是错误的
如果第二个第二个正则表达式是这样/apple(,)(5)orange\2/那么等同于/apple,5orange5/,那样是可以的
\n实际上就是反向引用其前面捕获组中的数据,有几个捕获组,就可以引用几个