一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace、split、substring、indexOf等函数,这些函数有时候需要多次叠加使用,但是用起来比较简单,语法和书写格式比较容易记住,所以使用率是相当高的。 今天在操作一段字符串时,需要揪出字符串里的一个数字,虽然用split、substring、indexOf这几个函数的结合使用能实现,但是如果用下正则表达式,则效果好很多,正则表达式的最大作用不就是匹配吗?于是尝试使用正则表达式来编写程序。 var s = '我正在使用卡卡网www.webkaka.com来测试网站速度'; 这样的结果可以得到网址“www.webkaka.com”。 但是当上述语句的“卡卡网”是一个变量时,replace()就出现了问题。 我开始这样写: var s = '我正在使用卡卡网www.webkaka.com来测试网站速度'; 但是运行结果是:我正在使用卡卡网www.webkaka.com来测试网站速度。也就是没有把网址给取出来。 然后又试了很多方法,都不顶用。 看来这里用replace()是行不通了,最后解决的方式变得比较复杂,写法如下: var s = '我正在使用卡卡网www.webkaka.com来测试网站速度'; 运行结果是:www.webkaka.com 这里用到RegExp类,下面解释下上述语句的含义。 var regExp=new RegExp(); //是定义一个正则表达式实例 [\s\S]* 可以匹配所有字符,包括换行符等不可见符号。 [a-z.]* 是匹配网址,当然,这个写法只能匹配包含小写字符的网址,扩充写法是[a-zA-Z0-9.~]*就可以包含大部分网址了。 gmi 是,g表示全局扫描,如果不加,那么只匹配第一个匹配到的。加了g选项后,每一次匹配后,就会往下匹配。当扫描不到匹配的字符时,则返回null。i表示不区分大小写。 regExp.test(s); //s是原字符串,用regExp的正则去匹配出想要的一段字符串。 RegExp.$2; //这个是取第2个匹配项,每一个括号()是一个匹配项。
|