我需要在网址中替换'http://'
'https://'
(前者存在);如果'http://'
或'https://'
不是前缀(架构),那么我需要在网址前加上'https://'
。
我只需检查网址是否以'http'
开头,并相应地将其作为'https'
的前缀,或者替换'http'
(如果存在)。它很简单,需要2行代码,但是......
是否可以使用JavaScript正则表达式函数执行一行?
答案 0 :(得分:1)
function simpleHttpsPrefixer(url) {
return url.replace(/^(?:https?:\/\/)?(.*)/, "https://$1");
}
答案 1 :(得分:0)
只做
var str = "http://www.whatever.com.au";
str = str.replace("http://", "https://");
alert(str);
如果你想单行:
url = url.replace("http://", "https://");
答案 2 :(得分:0)
是的,可以使用JS正则表达式替换在一个语句中执行此操作:
url = url.replace(/^(?:https?:\/\/)?(.*)/, "https://$1");
下面的代码段演示了上述带有http
,https
和无模式网址的单语句正则表达式解决方案。
var schemalessUrl = "www.whatever.com.au";
var httpUrl = "http://www.whatever.com.au";
var httpsUrl = "https://www.whatever.com.au";
var urls = [schemalessUrl, httpUrl, httpsUrl];
for (var i = 0; i < urls.length; i++) {
urls[i] = urls[i].replace(/^(?:https?:\/\/)?(.*)/, 'https://$1');
console.log(urls[i]);
alert(urls[i]);
}
&#13;
当然,如果没有正则表达式替换,也可以在单个语句中执行此操作。三元条件运算符可以将任何事物折叠成一个语句(无论好坏):
url = url.indexOf('http://') === 0 ? url.replace('http://', 'https://') : (url.indexOf('https://') !== 0 ? 'https://' + url : url);
下面的代码段同样演示了上述单语句,非正则表达式解决方案,其中包含http
,https
和无模式网址。
var schemalessUrl = "www.whatever.com.au";
var httpUrl = "http://www.whatever.com.au";
var httpsUrl = "https://www.whatever.com.au";
var urls = [schemalessUrl, httpUrl, httpsUrl];
for (var i = 0; i < urls.length; i++) {
urls[i] = urls[i].indexOf('http://') === 0 ? urls[i].replace('http://', 'https://') : (urls[i].indexOf('https://') !== 0 ? 'https://' + urls[i] : urls[i]);
console.log(urls[i]);
alert(urls[i]);
}
&#13;
话虽如此,我更喜欢正则表达式解决方案,但TMTOWTDI。