Javascript bookmarklet中的字符串操作与控制台中的行为不同

Javascript bookmarklet中的字符串操作与控制台中的行为不同,javascript,regex,string,google-chrome,bookmarklet,Javascript,Regex,String,Google Chrome,Bookmarklet,在谷歌Chrome控制台中,这是可行的(它说弹出窗口被阻止了,但现在不介意) 弹出窗口在http://www.bugmenot.com/view/thesite.com 现在,这不能作为bookmarklet使用: javascript:open('http://www.bugmenot.com/view/'+(escape(location).replace(/^\w+%3a\/\//i,'').replace(/\/.*/i,''))); 它打开的不是完全相同的URL,而是http://w

在谷歌Chrome控制台中,这是可行的(它说弹出窗口被阻止了,但现在不介意)

弹出窗口在
http://www.bugmenot.com/view/thesite.com

现在,这不能作为bookmarklet使用:

javascript:open('http://www.bugmenot.com/view/'+(escape(location).replace(/^\w+%3a\/\//i,'').replace(/\/.*/i,'')));
它打开的不是完全相同的URL,而是
http://www.bugmenot.com/view/http%3A

为什么?

试试这个:

javascript:open('http://www.bugmenot.com/view/'+(escape(location).replace(/^.*?\/\/([^\/]*).*$/i, "$1")));

导致此问题的原因是
%3a
在URL栏或bookmarklet中被解释为

javascript:alert('%3a');
将被解释为

javascript:alert(':');

正则表达式上的这个值也是如此,相关的结果也随之产生。

Re:一个快乐的开发者。但我爱的不仅仅是代码——她不是什么,而是某个人@Ω超级男人,你说得对!我得重新表述一下。你应该使用尽可能简单的模式。祝你好运所以你告诉我你也不知道:(@CamiloMartin-当我看到你在使用两个
replace
,我只带来了一个简单的…我没有测试你的…字符串中可能有一些特殊字符,或者
%
这里有问题,或者…如果你想玩,试试
*%3a
*%3a
(如果没有
^
),它将如何处理…使用相同的结果:(它在控制台中工作,但结果不同于Chrome上的URL栏/bookmarklet。更奇怪的是,
javascript:alert(escape(location))
在这两个浏览器上警告完全相同的字符串。
javascript:alert(':');