我制作了这个正则表达式,当我在 RegExr 中测试它时,它完全符合我的要求:
^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?
但是,当我在 javascript 中对其进行测试时,它说表达式无效。经过数小时的调试,我发现这个表达式在 javascript 中有效:
^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?![a-z0-9]+\.)?(localhost|yahoo\.com)(.*)?
但是,这并不能满足我的要求(再次在 RegExr 中进行测试)。
为什么我不能在 javascript 中使用第一个表达式?我该如何解决?
7月25日更新
抱歉信息不足。我使用正则表达式的方式是通过一个 jQuery 扩展,它让我可以使用正则表达式进行选择。该脚本可以在这里看到:http: //james.padolsey.com/javascript/regex-selector-for-jquery/
我试图开始工作的具体代码是:
$('a:regex(href, ^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?)').live('click', function(e) {
在包含链接的 jQuery 插件之后。我正在测试的文本字符串是:
- http://yahoo.com
- http://google.dk
- http://subdomain.yahoo.com
- http://test.yahoo.com
- http://localhost.dk
- http://sub.yahoo.com/lalala
它应该匹配“http://google.dk”、“http://test.yahoo.com”和“http://sub.yahoo.com/lalala”的地方——它在使用 RegExr 但失败时会匹配(无效表达式)使用 jQuery 插件。