js正则表达式zz

<%--

js正则表达式
2007-09-02 16:54

正则表达式可以通过javascript的字符串和 regexp来使用。

每个javascript字符串都可以通过三种方法来支持正则表达式,这三种方法是match()、replace()和search(),而且表达式对象本身还有多种方法。先介绍每个字符串可以支持的match()、replace()和search()方法的信息:

match(): 用于正则表达式匹配,如果多个匹配出现,则返回一个含有所有匹配结果的数组,数组中的每一个条目都是一份包含了匹配数据的拷贝;如果没有匹配值,则返回空值。
array=str.match(/表达式/);
replace(): 用于正则表达式匹配并将所有的匹配值替换为新的子字符串,本方法的第一个参数是正则表达式,第二个参数是进行替换的字符串。
newstr=str.replace(/表达式/,'要替换的字符串‘);
search(): 用于在正则表达式与指定字符串之间搜索匹配值,如果出现匹配值,则返回字符串的索引值,如果没有匹配值,则返回-1。
str or num =str.search(/表达式/);
javascript 还提供了 regexp对象来创建并使用正则表达式。

regexp 对象包含了正则表达式的模式,该对象的方法和属性可以用来匹配字符串,有两种方法可以用来创建 regexp对象的实例:使用构造函数或使用正则表达式文本模式的文字方式,第二个参数是可选的,该参数可以指定该搜索是全局的(g)、忽略大小写的(i)或者全局同时忽略大小写(gi)。以下的例子是使用构造函数创建 regexp对象的方法,在这个例子中,搜索对象的大小写是被忽略的:

testregexp = new regexp("^search$","i")

您可以使用文字方式来创建相同的实例(在斜杠中的部分),如下所示:

testregexp = /^search$/i

regexp
正则表达式对象的属性及方法
预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋以不同的值。许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(JavaScript模拟perl的正则表达式)
正则表达式对象的属性 属性 含义
$1…$9 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$’          参见rightContext
constructor    创建一个对象的一个特殊的函数原型
global       是否在整个串中匹配(bool型)
ignoreCase     匹配时是否忽略大小写(bool型)
input        被匹配的串
lastIndex     最后一次匹配的索引
lastParen     最后一个括号括起来的子串
leftContext    最近一次匹配以左的子串
multiline     是否进行多行匹配(bool型)
prototype     允许附加属性给对象
rightContext    最近一次匹配以右的子串
source       正则表达式模式
lastIndex     最后一次匹配的索引

正则表达式对象的方法
方法 含义
compile      正则表达式比较
exec        执行查找
test        进行匹配
toSource      返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString      返回特定对象的串。重载Object.toString方法得到的。
valueOf      返回特定对象的原始值。重载Object.valueOf方法得到
test方法将对指定字符串进行正则表达式匹配,如果成功则返回true,失败则返回false,该方法可以应用在文字字符串或者字符串变量上,基本上,它允许您对一个字符串进行正则表达式匹配,以下的例子演示了如何使用这个方法:

testregexp = /search/i;

if (testregexp.test("this is a search string") {

document.write("the string was found.");

} else {

document.write("no match found.");

}



基本语法

正则表达式的语法可以应用得很复杂,甚至需要一整本书来讲解这个题目,但是我将讲解其中一部分基本知识来帮助您获取正则表达式的初步认识。

一个基本概念是锚(anchor),它允许您指定字符串的起点和终点,脱字符(^)用于指定字符串的起点而美元符号($)则表示终点。如果需要在查询字符串中含有脱字符或者美元符号,您可以使用转义序列来实现,转义字符(\)是优先于脱字符或者美元符号之处理的。以下的例子会在单词search在字符串中出现时进行匹配。

^search$

而且,您还可以查找一组字符,只要将它们放在方括号中就行了,比如[ and ],相匹配的字符必需属于这个字符组,一个例子是在[12345]的范围内寻找匹配的数字1到5,该正则表达式也可以写作[1-5]。

很多时候您可能需要指定可以出现多次的字符,或者可选的字符,问号(@)的意思是该字符是可选的,加号(+)的意思是该字符可以出现一次或者多次, 星号(*)的意思是该字符可以不出现或者出现多次。

现在让我们来看看如何将这些简单的正则表达式应用到javascript上。
we can place it in a web page to test:

<html><head>

<title> regexp test</title>

</head><body>

<script language="javascript">

testregexp = /search/i;

if (testregexp.test("this is a search string")) {

alert("the string was found.");

} else {

alert("no match found.");

}

</script></body></html>

实际操作

现在是讲解更加完整的例子的时候了,在列表a中的网页包含了javascript方法来验证文本框中输入的值,这段javascript代码将搜索包含我的姓氏和我的两个名字的字符串(忽略大小写),如果找到了我的名字,则通过字符串对象的替换方法(search)将其替换为一个短名字。第二个文本框是用于接受时间值的,一个正则表达式在此对输入的时间进行合法性验证(数字是通过冒号分割的)。这个简单的例子说明了如何在您的客户端代码中加入正则表达式来进行匹配和替换:

<html><head>

<title> regexp validation</title>

<script language="javascript">

function validate() {

var doc = document.test;

varvalname = new regexp("^(tony|anthony) patton", "i");

if (doc.name.value.match(valname) == null) {

alert("name was not found.");

} else {

doc.name.value = doc.name.value.replace(valname, "t. patton");

}

varvaltime = new regexp("^([0-1][0-9]|[2][0-3]):([0-5][0-9])$");

if (doc.time.value.match(valtime) == null) {

alert("please enter correct time format (hh:ss)");

} }

</script></head>

<body><form name="test">

name: <input type="text" name="name" value=""><br>

time: <input type="text" name="time" value=""><br>

<input type="button" name="test" value="test" οnclick="validate();">

</form></body></html>

 

--%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值