首页 新闻 会员 周边

用正则表达式匹配括号外的数据

0
悬赏园豆:15 [待解决问题]

用正则匹配括号内的数据,这个较容易实现,但是匹配括号外的数据,貌似就比较困难了.例如:

"{controller}/cc/{action}/{id}"

我想得到/cc/,/ 这两个括号外的数据.
如果是匹配括号内的数据(包括括号),这个可以用这段正则实现

/{[^}]+}/

测试代码(javascript实现):

"{controller}/cc/{action}/{id}".replace(/{[^}]+}/ g,'-')

但是提取括号外的内容,困难得很啊.不知道哪位可以实现这个需求?
几个特殊的字符串:

"{controller}/cc/{action}/{id}}"      匹配到空字符串
"{controller}}/cc/{action}/{id}"    匹配到:}/cc/, /

易海之畔的主页 易海之畔 | 初学一级 | 园豆:149
提问于:2012-09-14 16:42
< >
分享
所有回答(4)
0

正则分组,这个很久没做了,你搜一下

空明流光 | 园豆:106 (初学一级) | 2012-09-14 16:44
0

你把那个匹配括号内的睁着的前后两个大括号调换位置不就可以了么??/}[^{]+{/

俗人... | 园豆:83 (初学一级) | 2012-09-14 16:53

这个匹配是有问题的,比如这个要求就不满足

"{controller}/cc/{action}/{id}}"      匹配到空字符串

 

支持(0) 反对(0) 易海之畔 | 园豆:149 (初学一级) | 2012-09-14 16:57
0
var reg=new RegExp("(\{[^}]+\})(/[^/{}]*/?)?","g");
var str="controller}/cc/{action}/{id}";
while(reg.exec(str)){
    RegExp.$1;// {controller},{action}
    RegExp.$2;// /cc/,/
}
向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-14 17:06
0

([^}]+?(?=[{])|(?<=[}])[^{]+)

 

已测试通过,

只会造轮子 | 园豆:2274 (老鸟四级) | 2012-09-14 21:59

?<=这种匹配貌似javascript不支持

支持(0) 反对(0) 易海之畔 | 园豆:149 (初学一级) | 2012-09-14 23:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册