我有一个字符串数组,我想创建一个包含相同字符串而没有端口号的新数组(端口号是“:”后跟一个数字)。例如,如果字符串为“http://www.example.com:8080/hello/”,则应将其替换为“http://www.example.com/hello/”。我如何在JavaScript中执行此操作?我需要它来调用safari.extension.addContentScriptFromURL,因为白名单不能包含端口号。如果可能的话,最好只在第二个和第三个斜杠之间替换端口号,并保持字符串的其余部分不变。
答案 0 :(得分:4)
这应该可以做你想要的:
var newUrls = urls.map(function (url) {
return url.replace(/([a-zA-Z+.\-]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
});
编辑:似乎URI的架构部分可以包含“+”,“。”并且。相应地更改了正则表达式。
答案 1 :(得分:3)
执行此操作的一种非常好的方法是创建a
元素,并将您拥有的网址指定为href
- 因为the HTMLAnchorElement
interface implements URLUtils
,因此支持访问单个部分地址的方式与location
对象的方式相同,您也可以单独设置:
var foo = document.createElement("a");
foo.href = "http://www.example.com:8080/hello/";
foo.port = ""
var newURL = foo.href;
console.log(newURL); // output: http://www.example.com/hello/
答案 2 :(得分:2)
您可以使用带有string.replace()的正则表达式,如下所示,
var text = "http://www.example.com:8080/hello/";
var withNoDigits = text.replace(/[0-9]/g, '');
var outputString = withNoDigits.replace(/:([^:]*)$/,'$1');
alert(outputString);
答案 3 :(得分:0)
function parseURL(url) {
var parser = document.createElement('a'),
searchObject = {},
queries, split, i;
parser.href = url;
queries = parser.search.replace(/^?/, '').split('&');
for( i = 0; i < queries.length; i++ ) {
split = queries[i].split('=');
searchObject[split[0]] = split[1];
}
return {
protocol: parser.protocol,
host: parser.host,
hostname: parser.hostname,
port: parser.port,
pathname: parser.pathname,
search: parser.search,
searchObject: searchObject,
hash: parser.hash
};
}
使用它来解析任何URL并以您喜欢的格式排列。
答案 4 :(得分:0)
好的,我用了你的答案并稍微改了一下,因为协议也可能包含破折号:
var newUrls = urls.map(function(url) {
return url.replace(/([^\/\:]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
})
答案 5 :(得分:0)
我在这里找到了最佳解决方案。
var url = 'http://localhost:7001/www.facebook.com';
// Create a regex to match protocol, domain, and host
var matchProtocolDomainHost = /^.*\/\/[^\/]+:?[0-9]?\//i;
// Replace protocol, domain and host from url, assign to
{myNewUrl {1}}
现在myNewUrl ==='www.facebook.com'。
最好阅读整页。 remove hostname and port from url using regular expression
答案 6 :(得分:0)
您不需要任何库或REGEX
var url = new URL('http://localhost:8080');
url.port = '';
console.log(url.toString());
https://developer.mozilla.org/en-US/docs/Web/API/URL
问候