正则表达式的简要说明

正则表达式的简要说明(参考Nicholas C. Zakas的《Javascript高级程序设计》ISBN 7-115-15209-8)

什么是正则表达式?
用来表示指定的字符或者字符串在另一个字符串出现的情况。比如可用于去除字符串中的空格,典型如Trim()函数;检查金额字符串的有效性等等。

怎么用呢?能否举个例子呢?
首先要定义一个正则表达式,有2种办法
Var re = new RegExp(“cat”);

Var re = /cat/
还可以指定几个参数。
Var re = new RegExp(“cat”,gi);

Var re = /cat/gi;
参数g是指找到全部匹配cat的字符串,
参数i是不区分大小写。

下面介绍几个简单的使用方法,方便理解。

测试字符串中是否有匹配的值
alert(re.test(“cat 123”)); //显示true

str = "a bat, a Cat, a fAt baT, a faT cat";
rs = /at/gi; //定义正则表达式

//找到所有匹配的字符串,保存在数组中返回。
ss = str.match(rs);
for(i=0;ialert(ss[i]);
}

//找到匹配字符串所在位置,这里输出是3
alert(str.search(/at/));

//替换指定的字符串,下面2个方法都是有效的。
alert(str.replace("bat","bbb"));
alert(str.replace(/bat/,"bbb"));
如果用正则,还可以加上参数gi就可以不分大小写替换所有配置的字符串。
alert(str.replace(/bat/gi,"bbb"));

如果你想查找的字符是一些符号的话,比如?(问号)、*(星号)等,
定义正则表达式要这样
var re = /\?/;

var re = new RegExp("\\?"); //注意要有2个\\

为什么要这样呢?
因为正则表达式中有一些“元字符”,这些元字符可以帮助实现更加复杂的功能,后面会介绍到。
这些元字符有:
( ) [] {} \ ^ $ | ? * + .
要注意区别,这些字符在你的正则表达式中是用来做查找的字符,还是用来做参数用的。

正则表达式还有一些特殊字符,
\t 制表符
\n 换行符
\r 回车符
\f 换页符
\a alert字符
\e escape字符
\cX 与X相对应的控制字符
\b 回退字符
\v 垂直制表符
\0 空字符
这些有什么用呢?
比如我自己曾经遇到一个问题,页面上有一个textarea收集长文本,然后我要把这个长文本放到一个div.innerText中,但原来的换行
都显示成空格。这个问题就可以用下面的正则来解决了,
div.innerHtml = sLongText.replace(/\n/g,"
"); //把字符串中所有换行符转成

下面的例子是查找所有配置bat、cat、fat的字符串
var str = "a bat, a Cat, a fAt baT, a faT cat";
var re = /[bcf]at/gi; //注意中括号的作用
var results = str.match(re);
alert(results.length); //返回6
查找所有除了bat、cat的其他字符开头+at的字符串
var str = "a bat, a Cat, a fAt baT, a faT cat 1at";
re = /[^bc]at/gi;
results = str.match(re);
alert(results.length); //返回3

查找一定范围内的字符串
var str = "num1, num2, num3, num4, num5, num6, num7, num8, num9";
re = /num[1-4]/gi;
results = str.match(re);
alert(results.length);
for(i=0;ialert(results[i]); //返回num1 num2 num3 num4
}
如果查找对象没有顺序的时候,看下面的效果
var str = "num1, num32, num5, num2, num4, num3, num7, num8, num9";
re = /num[1-4]/gi;
results = str.match(re);
alert(results.length);
for(i=0;ialert(results[i]); //返回num1 num3(注意不是num32) num2 num4 num3
}
有些常用的匹配模式都有一个简单的代替方法。
.(点) 相当于 [^\n\r] 所有字符(除换行和回车以外)
\d 相当于 [0-9] 数字
\D [^0-9] 非数字字符
\s 空白字符
\S 非空白字符
\w 单词字符(注意配置的是字符,也就是一个一个的。包括字母、数字、下划线)
\W 非单词字符
var str = "apple 01 , able10 , foo433 , barr211 , test300 ";
re = /\d\d\d/g;
results = str.match(re);
alert(results.length);
for(i=0;ialert(results[i]); //返回433, 211, 300 这3个值
}
如果把正则改为re = /\d\d\d\d/g; 也就找连续的4个数字的字符创,结果会是什么呢?
results = str.match(re); //results = null 也就是没有匹配的。所以要注意控制match的返回值,如果还是上面的代码这个时候就会出错了。

用几个\d可以匹配一定长度的数字字符串,其实还有一种办法。
先说说‘量词’的概念--指定某个模式出现的次数。
? 出现零次或一次
* 出现多次
+ 出现多次,至少一次
{n} 出现n次
{n,m} 至少出现n次,但不超过m次
{n,} 至少出现n次
var str = "bread, read, red";
re = /b?rea?d/g; //覆盖的单词有bread,bred, read, red,
results = str.match(re);
alert(results.length);
for(i=0;ialert(results[i]); //返回这3个字符串
}
re = /b?rea?d/g;也可以用另一种形式 re = /b{0,1}rea{0,1}d/g; 两者的效果是一样的。
还记得[]中括号的作用吗?对比一下。
var str = "a bat, a Cat, a fAt baT, a faT cat";
var re = /[bcf]at/gi; //b、c、f三个字符中任一个
var results = str.match(re);
alert(results.length); //返回6

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22885108/viewspace-622436/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22885108/viewspace-622436/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值