笔记(一) 正则表达式

正则表达式

正则表达式在英文中称为Regular Expression,简称为RegExp。正则表达式最早是由数学家Stephen Kleene于1956年提出来的,这是他在对自然语言的递增研究成果的基础上提出来的。正则表达式并非一门专用的语言,这一点大家要明白。但是它可以用于在一个文件或字符里查找或替换文本。它具有两种标准:基本的正则表达式(BRE)和扩展的正则表达式(ERE),其中ERE包括BRE的功能和其他概念。简单的说,正则表达式是一种用于模式匹配和替换的强有力工具。正则表达式可以通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据件、程序输入以及Web页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序,防注入系统都是利用这个原理来编写的。

正则表达式最普通的应用可能就要算是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户电子邮件地址的格式正确,用户所填写的表单信息将被正常处理,反之,如果用户输入的电子邮件地址与正则表达式的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。正则表达式就是由普通字符(例如字母a到z)以及特殊字符(称为元字符)组成的文字模式,这些模式就是描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式使用斜杠进行分隔,例如,
/abc/就定义了一个简单的正则表达式。
正则表达式的用途主要有以下三点:


(1)、测试字符串是否符合某个模式。例如,可以对一个输入字符串进行测试,看这个字符
串是否符合电话号码的模式要求或信用卡号码的模式,这种需求称为数据有效性验证。
(2)、替换文本。可以在文档中使用正则表达式来标识特定的文字,然后将其删除或替换成
别的文字,防注入系统就是利用的这个功能实现的。
(3)、根据匹配模式从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定
的文字,我们的记事本就有这个功能。

创建正则表达式

 

正则表达式就是一个字符模式。在javascript中,正则表达式类似,是javascript的一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方法:文字量方法和使用构造函数RegExp()。下面我就给大家说说这两种方法。
1.  使用文字量方法创建正则表达式
使用文字量创建正则表达式的方法为:将文字量的正则表达式赋值给一个变量。正则表达式包含在两个斜杠之间的一个或多个字符,在后一个斜杠后面,可以指定一个或多个选项。例如:/abc/、/ab+c/、/abc/1、/abc/gi都是正则表达式。使用文字量方法创建正则表达式的一般格式为:
Var varname = /pattern/flags
其中,varname是变量名称,这个变量用于保存新创建的正则表达式;pattern为指定匹配模
式的正则表达式;flags是零个或多个选项,有效选项及其意义为:
● i——忽略大小写,即进行字符串匹配时,不区分大小写。
● g——全局匹配,即匹配字符串中出现的所有模式。
● m——进行多行匹配。

下面是一些正则表达式的示例:

Var hacker = /CDSN/;
Var reobj = /love me/ig;
/^JavaScript/
/19[0-9][0-9]*/

使用构造函数RegExp()创建正则表达式的一般格式为:

Var varname = new RegExp("pattern"[, "flags"])

其中,varname是变量名称,该变量用于保存新创建的正则表达式;pattern为指定匹配模式的正则表达式;flags是零个或多个可选项,方括号表示flags参数可以省略。在这里,pattern和flags参数都可以是字符串变量。例如:
 

Var country = new RegExp("脚本黑客");
Var reobj = new RegExp("脚本黑客", "ig")
  • 正则表达式对象的方法

正则表达式对象RegExp提供两种方法:test()exec()。这两个函数的语法分别为:
test(string)
功能为:测试字符串string是否包含了匹配该正则表达式的子串,如果包含了这样的子串,那么函数返回ture,否则返回false。
exec(string)
功能为:在字符串string中进行匹配搜索,并将结果保存在一个数组中返回;如果没有找到匹配的子串,那么返回null。

(1)、test()
正则表达式对象RegExp的test()方法用于检测字符串中是否包含正则表达式指定的模式,包含指定的模式返回ture,否则返回false。完成检测后,RegExp对象的lastIndex属性包含了下一次字符串搜索的开始位置。如果进行全局搜索,那么lastIndex属性的值最后一个匹配字符串后面一个字符的位置。使用test()方法进行正则表达式匹配测试的一般过程为:
①、使用一个变量,将正则表达式赋值给这个变量
②、使用该正则表达式的test()方法,检测字符串中是否包含该正则表达式指定的模式

<html>
<head>
<title>test()方法</title>
<script language = "JavaScript">
var myString="精通脚本黑客";
var myregex = new RegExp("黑客"); // 创建正则表达式
if (myregex.test(myString)){ //判断条件是否成立
alert("找到了指定的模式!");
}
else{
alert("未找到指定的模式。");
}
</script>
</head><body></body>
</html>

 

(2)、exec()
exec()方法忽略了正则表达式中的g选项。执行exec()方法后,正则表达式对象的lastIndex属性的值是我们在前一次匹配字符串后面的第一个字符的位置,不过需要注意的是这里是从零开始计数的。所以,利用这个特性,可以得到字符串中与正则表达式相匹配的所有子串。exec()方法返回的数组对象有一个扩展属性,一般的数组是没有这个特性的,我们称为index,它给出了匹配字符串的开始位置。此外,该数组还有另外一个扩展属性,称为input,它给出了被搜索字符串。

  • 正则表达式的字符串对象的常用方法

 

方法 功能
Match(regex)在一个数组中返回与正则表达式regex相匹配的子串
Replace(regex,replacement)将字符串中regex指示的子串替换为replacement
Search(regex)查找正则表达式regex指示的模式在字符串中的开始位置
Split(regex)  使用正则表达式regex分割字符串,并将分割结果以数组形
式返回

 

通用防注入系统就是利用这个Replace(regex,replacement)方法来完成。用于过滤攻击代码,举例:

<html>
<head>
<title>字符串对象replace()方法演示 </title>
</head>
<body bgcolor="lightgrey">
<font size="+1">
<font face="宋体">
<script language = "JavaScript">
<!--
var oldString="哈哈哈哈"
var regex = /哈哈/g; //一个全局替换的正则表达式
var newString=oldString.replace(regex, "嘿嘿");
document.write(newString +"<br>");
// -->
</script>
</body>
</html>

(运行结果)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值