1 gxl442172663 2015-08-13 16:54:03 +08:00 |
2 wh0syourda66y 2015-08-13 16:57:59 +08:00 建议楼主去玩一下regex golf http://regex.alf.nu/ |
![]() | 3 echo1937 2015-08-13 17:47:28 +08:00 推荐一本书《精通正则表达式》 |
![]() | 4 orcusfox 2015-08-13 18:34:02 +08:00 |
![]() | 5 orcusfox  2015-08-13 18:42:46 +08:00 #1."abcd".match(/ab|cd/) 无需解释 #2."abcd".match(/(ab|cd)/) 事实上这是分组函数,返回的数组:第一个是字符串本身,第二个往后是匹配到的分组 #3."abcd".match(/(ab|cd)+/) #4."abcd".match(/ab|(cd+)/) 依旧分组,其实能匹配到ab,然而括号决定了你需要的是cd+,字符串里并没有cd+,返回undefined #5."abcd".match(/ab+|cd+/) 无需解释 #6."abcd".match(/(ab)+|cd+/) 同分组 #7."abcd".match(/ab|(cd)+/) 分组 事实上如果没有需要从字符串中取出数据的需求,仅仅是验证的话,可以使用test函数。 |
![]() | 6 orcusfox 2015-08-13 18:46:53 +08:00 错了 没睡醒 当没看到吧 |
![]() | 7 cc7756789 2015-08-13 18:54:10 +08:00 ```Javascript "zzabcd".match(/zz(ab|cd)/) >= ["zzab", "ab"] ``` 圆括号中的是被称为小正则,上面的匹配结果中,会返回2个值,第一个值是匹配的完整值,第二个值则是匹配小正则(圆括号)中的值。故为什么JS中 `"abcd".match(/(ab|cd)/) ` 返回了2个ab,因为第一个值代表完整匹配的值,而第二个值代表小正则中的值。 ```Javascript "zzab".match(/(zz(ab|cd))/) >= ["zzab", "zzab", "ab"] ``` 这里最外围又加了一个括号,原理是一样的,返回的值按完整值,小正则,小小正则,依次排列。 |
![]() | 8 flowfire 2015-08-13 21:42:42 +08:00 本来觉得自己挺清楚的。。。看完糊涂了。。。 "abcd".match(/(ab|cd)+/) 这个正则不是应该返回 ["abcd","ab","cd"]么 |
![]() | 9 FrankFang128 2015-08-14 01:17:54 +08:00 via Android 感觉被你搞复杂了 |