会JavaScript正则表达式的高手进来看看

来源:百度知道 编辑:UC知道 时间:2024/06/11 00:48:32
请详细帮我注释一下这段匹配字符串的正则表达式.

var re = /(http:\/\/[\w.\/]+)(?![^<]+>)/gi;

先谢谢啦.
这个正则表达式是一位大虾帮忙写的验证URL字符串的,如果字串中有URL则加上一个链接这样,但是如果有<IMG SRC=http://...>这些则不匹配。我不明白,也不知道是否够严谨,希望弄清楚一些。
var re = /(http:\/\/[\w.\/]+)(?![^<]+>)/gi;
中间的+?[]()+>这些可以解释一下吗? 为什么不用|(与)的呢?

这个正则表达式有点奇怪,先逐步分析一下吧。

http:\/\/是说明这个字符串里一定要有 http:// 这串字符,因为最前面没加“^”这个字符,那么要测试的字符串里任意位置有 http:// 这串字符都可以。

然后是 [\w.\/]+ ,这个说明紧跟在http://之后一定是一个任意字母加上一个任意非\n(就是换行)的字符再加上一个 / 这个符号,并且这样的组合需要是一个以上,也就是说类似于 ww/, ab/, s./gy/n?/这样的几组都是合适的。

之后的 ?![^<]+ 是说,紧接下来如果有一个以上的非“^”这个字符的字符,那么就能验证通过,在前述这些字符串之后应该有个“>”字符。

由于没有结束符$,那么只要需要验证的字符串中任意位置有了上述的字符串,就能够验证通过,并且是全局验证(g)和不分大小写(i)验证的。

这个正则表达式表面上看好像是想验证一个url字符串,但是经过上面的分析,却好像不那么严格。

+表示匹配一个以及以上,比如a+可以匹配a,aa,aaaa。
?表示匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
但是在这里?和!是连在一起的,也就是
?!负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
[]字符集合。匹配所包含的任意一个字符。例如,'[abc]'