网站地图    收藏   

主页 > 专题教程 > javascript > js基础 >

正则表达式-创建正则表达式

来源:自学PHP网    时间:2018-02-08 10:24 作者: 阅读:

[导读] 正则表达式就是一个字符模式。和String对象类似,在JavaScript中正则表达式也是一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方式:隐式创建(文字量方法)和显示创...

正则表达式就是一个字符模式。和String对象类似,在JavaScript中正则表达式也是一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)。

使用隐式方法创建正则表达式的方法为:将文字量的正则表达式赋值给一个变量。正则表达式是包含在两个斜杠之间的一个或多个字符,在后一个斜杠的后面,可以指定一个或多个选项。隐式创建正则表达式的语法为:

var regExp = /pattern/flags
                            

其中,“pattern”为指定的匹配模式,flags为0个或多个可选项,这些选项及其含义如下:

  • i:表示忽略大小写,就是在字符串匹配的时候不区分大小写。
  • g:表示全局匹配,即匹配字符串中出现的所有模式。
  • m:表示进行多行匹配。ECMAScript标准化之前,不支持m属性。如果pattern是正则表达式,而不是字符串,则必须省略该参数。

例如下面的正则表达式都是有效的正则表达式:

var regExp1 = /abc/;                              
var regExp2 = /abc/gi;                              
var regExp3 = /^JavaScript/;                              
var regExp4 = /0[0-9][0-9]*/;                              
var regExp5 = /\binter/i;                              
                            

显示的创建正则表达式是通过构造函数RegExp()来实现。构造函数RegExp()中有2个参数:第一个参数指定正则表达式,这是正则表达式的字符串表示方法,例如:“abc”表示隐式创建中的/abc/,第二个参数是可选参数,它指定正则表达式的选项,它的标记字符和隐式创建时的相同,意义也相同。显示创建正则表达式的语法为:

var regExp = new RegExp("pattern","flags");
                            

正则表达式对象RegExp提供了两个可用的方法:test()exec()

test()方法

test()方法的功能为:测试字符串中是否包含了匹配该正则表达式的子串,如果包含了这样的子串,那么返回true,否则返回false

在使用test()方法完成检测之后,RegExp对象的lastIndex属性包含了下一次字符串搜索的开始位置。如果进行全局搜索,那么lastIndex属性的值是最后一个匹配字符串后面一个字符的位置。来看下面的例子:

var mystring = "hello regExp!";
var regexp = /reg/i;
if(regexp.test(mystring)){
  alert("找到了指定模式的字符串");
}else{
  alert("没有找到指定模式的字符串");
}
                            

在这个例子中,使用正则表达式/reg/i来测试mystring字符串中是否包含匹配的模式子串,匹配时不区分大小写。得到的结果为true,所以会显示“找到了指定模式的字符串”。

exec()方法

exec()方法的功能非常强大,它是一个通用的方法,而且使用起来也比test()方法以及支持正则表达式的的方法更为复杂。

exec()的功能为:在字符串中进行匹配搜索,并将结果保存在一个数组中返回,如果没有找到子串,那么返回null。

exec()方法在功能上与的match()方法类似,它使用正则表达式指定的匹配模式搜索字符串,从中找到匹配的子串。没有找到子串时该方法返回null,否则会返回一个增强的数组对象(Array Object)。该数组中包含了匹配的子串。当我们需要知道匹配字符串的开始位置和匹配字符串是否多次出现时,应该使用这个方法。

当执行exec方法后,正则表达式对象的lastIndex属性的值为前一次匹配字符串后面的第一个字符的位置(从0开始计数)。使用这个特性,我们使用迭代和提取字符串方法,可以得到字符串中与正则表达式相匹配的所有子串。

下面是一个使用exec()方法的简单例子:

var mystring = "abc 123 def 456 ghj";
var regexp = new RegExp("123");
regexp.exec(mystring);                              
                            

exec()方法返回的数组对象有一个扩展属性(普通数组中没有这个属性),这个属性是index,它给出了匹配字符串的开始位置。此外,该数组还有另外一个扩展属性input,它给出了被搜索的字符串。

另外,返回的数组中,第0个元素是与正则表达式相匹配的文本,第1个元素是与正则表达式对象的第1个子表达式相匹配的文本(如果有的话),第2个元素是与正则表达式对象的第2个子表达式相匹配的文本(如果有的话),以此类推。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论