正则表达式入门-壹

前言:为一些特殊环境字符串匹配或截取所学


用于字符串

regexp.exec, regexp.test, string.match, string.replace, string.search, string.split.

用例子来学习

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9,\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url = "http://www.ora.com:80/goodpats?q#fragment";

这是从javascript精粹中的例子,用来匹配url,看到这里是不是晕了,拆分成一个个来看吧,希望读者在看的时候也动手检验,可以用网页调试进行测试。

^

表示匹配字符串开始

(?:([A-Za-z]+):)?

(?:...)表示非捕获型分组(可以理解为可以匹配,但是不返回结果分组里面去,regexp.exec可以让你明白这一点)

[...]表示匹配的字符串类,

+表示匹配一次或者更多,

跟着的:表示最后有一个:,

后缀?表示这个分组可有可无,也就是说这个表达式可以不进行匹配。

(\/{0,3})

(...)表示捕获型分组,regexp.exec匹配的字符串会返回结果分组中,

\/转义为/字符,这个\为转义符应该好理解,一些正则表达式中的特殊字符需要进行转义,

{0,3}表示匹配0到3次之间,用{3,}可以表示匹配三次以上。

([0-9.\-A-Za-z]+) 捕获型分组

\-转义为‘-’字符,

[0-9.\-A-Za-z]匹配0-9,‘.’,‘-’,A-Z, a-z字符,

+表示匹配1次或者更多。

(?::(\d+))? 

(?:...)?非捕获型可选分组,

:最前面匹配一个:字符,

(\d+)   \d表示一个数学字符,+匹配一次以上,那么总的表示返回匹配了数学字符的捕获分组。

(?:\/([^?#]*))? 

(?:...)?表示非捕获型可选分组,

\/转义为字符‘/’,并且首先被匹配,

[^?#] ^可表示非,表示匹配?#之外的所有字符,

*表示匹配0次或者更多,与+匹配一次以上相区别,

([^?#] *)表示捕获型分组,返回匹配结果分组。


接下来大家可以自己分解。


(?:\?([^#]*))?

(?:...)?非捕获型可选分组,

\?转义为?,首端匹配?,

([^#]*)捕获型分组,匹配除了#字符一次以上的字符串。

(?:#(.*))? 非捕获型可选分组

#开头匹配,

(.*)表示匹配换行符\n以外所有字符0次以上的捕获型分组

$

表示匹配字符串末尾


这是第一章,还有下一章

注:若有不妥之处,欢迎指正

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值