Javascript bookmarklet中的字符串操作与控制台中的行为不同
在谷歌Chrome控制台中,这是可行的(它说弹出窗口被阻止了,但现在不介意) 弹出窗口在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
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(':');