关于正则的一段小代码请教 很简单的小问题

籽沫 2010-06-23 04:51:24
var regular = /^(\(?:0\d{2,3}\))|(?:0\d{2,3})/

大家看看这段正则不知道为什么,它居然匹配:(021

我有点搞不懂了,明明我写的是2段表达式然后在用|去or匹配带()或者不带都通过

也就是开头可以是0或者(开头的但是如果是括号开头的话必须以)结尾,开始为什么我现在半个括号也是通过的?

现在我是知道的 这段正则有问题的 谁帮我翻译下我这么写的问题所在和我这样写是怎么样一个表述,非常感谢

还有()里面是指所有的内容都必须实现才匹配????
...全文
87 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
soisme 2010-06-24
你可以不用去掉^。使用了^和$,代表整个字符串都要用来和你的表达式来匹配。
回复
soisme 2010-06-24
你是不是搞错了,你这个跟顺序无关的,你写成/(\(0\d{2,3}\)|0\d{2,3})/g或者/(?:0\d{2,3})|(?:\(0\d{2,3}\))/g匹配的结果是一样的
不信你在这个工具上试试:
http://www.renrousousuo.com/tools/regex_debug.html

你最先的那个var regular = /^(\(?:0\d{2,3}\))|(?:0\d{2,3})/
应该改为
/(?:\(0\d{2,3}\))|(?:0\d{2,3})/g
这样就行了。修改的部分:
1. 去掉^
2. 把?:放到第一个括号后!因为第一个括号才是代表分组!

回复
myhope88 2010-06-24
这种跟顺序好像也有点关系吧
回复
籽沫 2010-06-24
谢谢各位了我自己仔细的研究了下确实和前后位置没关系是我后院用错了
回复
籽沫 2010-06-23
谢谢各位 我找到问题了 确实像lihui_shine做的一样只需要将2个正则的组位置兑换下就可以了 不过我还是 不知道为什么兑换位置后就可以实现呢??

帮下忙结束下谢谢

var regular = /^(?:0\d{2,3})|(?:\(0\d{2,3}\))$/
回复
籽沫 2010-06-23
[Quote=引用 6 楼 tigermfh 的回复:]

可以说说你想匹配什么样的字符串,欢迎加入群:95369264
[/Quote]

加了结束标签也是一样的 我测试过的
回复
籽沫 2010-06-23
谢谢各位

lihui_shine

你为什么分组放到一个组里面呢?

不是放到一个组里面要都匹配才通过的吗?
回复
马老虎 2010-06-23
因为没有结束 $

^(\(?:0\d{2,3}\))|(?:0\d{2,3})$
回复
tigermfh 2010-06-23
可以说说你想匹配什么样的字符串,欢迎加入群:95369264
回复
tigermfh 2010-06-23
var regular = /^(?:\(0\d{2,3}\))|(?:0\d{2,3})/这可能是你想要的
回复
浪尖赏花 2010-06-23
用这个吧
var re = /^(0\d{2,3}|\(0\d{2,3}\))$/;
回复
籽沫 2010-06-23
HELP
回复
籽沫 2010-06-23
而且我现在什么内容都不输入也是匹配的 这到底是为什么啊
回复
籽沫 2010-06-23
晕……这个问题谁帮下啊
回复
相关推荐
发帖
JavaScript
创建于2007-09-28

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2010-06-23 04:51
社区公告
暂无公告