আমি একটি স্ট্রিং নিতে চাই
var a = "http://example.com/aa/bb/"
এবং এটি যেমন একটি বস্তুর মধ্যে এটি প্রক্রিয়া
a.hostname == "example.com"
এবং
a.pathname == "/aa/bb"
আমি একটি স্ট্রিং নিতে চাই
var a = "http://example.com/aa/bb/"
এবং এটি যেমন একটি বস্তুর মধ্যে এটি প্রক্রিয়া
a.hostname == "example.com"
এবং
a.pathname == "/aa/bb"
উত্তর:
আধুনিক উপায়:
new URL("http://example.com/aa/bb/")
বৈশিষ্ট্য সহ hostname
এবং অন্য কয়েকজনকেpathname
সাথে নিয়ে একটি বস্তু ফেরত দেয় ।
প্রথম যুক্তিটি একটি আপেক্ষিক বা পরম URL; যদি এটি আপেক্ষিক হয় তবে আপনাকে দ্বিতীয় যুক্তি (বেস ইউআরএল) নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, বর্তমান পৃষ্ঠার তুলনায় একটি URL- এর জন্য:
new URL("/aa/bb/", location)
ব্রাউজারগুলি ছাড়াও, এই এপিআইটি v7 থেকে নোড.জেএস-এও উপলব্ধrequire('url').URL
।
new URL('/stuff?foo=bar#baz')
->SyntaxError: Failed to construct 'URL': Invalid URL
var getLocation = function(href) {
var l = document.createElement("a");
l.href = href;
return l;
};
var l = getLocation("http://example.com/path");
console.debug(l.hostname)
>> "example.com"
console.debug(l.pathname)
>> "/path"
pathname
অগ্রণী স্ল্যাশ সরিয়ে দেয়, অন্য ব্রাউজারগুলি তা না করে। সুতরাং আপনি /path
বা path
আপনার ব্রাউজারের উপর নির্ভর করে শেষ করব ।
এখানে পাওয়া গেছে: https://gist.github.com/jlong/2428561
var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";
parser.protocol; // => "http:"
parser.host; // => "example.com:3000"
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.hash; // => "#hash"
parser.search; // => "?search=test"
parser.origin; // => "http://example.com:3000"
parser = location;
এবং নীচের সমস্ত লাইন কাজ করে। এটি এখনই Chrome এবং IE9 এ চেষ্টা করেছেন।
pathname
IE এর মধ্যে শীর্ষস্থানীয় স্ল্যাশ অন্তর্ভুক্ত নয়। চিত্রে যান. : ডি
http:
পাস করলেও এটি ফিরে আসবে domain.com
। প্রোটোকলটি অনুপস্থিত ছিল কিনা তা যাচাই করার জন্য আমি এটি ব্যবহার করতে চেয়েছিলাম, এবং তাই হলে আমি এটি যুক্ত করতে পারি, তবে এটি HTTP ধরে নিয়েছে: সুতরাং এই উদ্দেশ্যে এটি ব্যবহার করতে অক্ষম ছিল।
এখানে একটি regexp ব্যবহার করে একটি সাধারণ ফাংশন যা এর অনুকরণ করে a
ট্যাগ আচরণটি ।
পেশাদাররা
কনস
-
function getLocation(href) {
var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
return match && {
href: href,
protocol: match[1],
host: match[2],
hostname: match[3],
port: match[4],
pathname: match[5],
search: match[6],
hash: match[7]
}
}
-
getLocation("http://example.com/");
/*
{
"protocol": "http:",
"host": "example.com",
"hostname": "example.com",
"port": undefined,
"pathname": "/"
"search": "",
"hash": "",
}
*/
getLocation("http://example.com:3000/pathname/?search=test#hash");
/*
{
"protocol": "http:",
"host": "example.com:3000",
"hostname": "example.com",
"port": "3000",
"pathname": "/pathname/",
"search": "?search=test",
"hash": "#hash"
}
*/
সম্পাদনা করুন:
এখানে নিয়মিত প্রকাশের একটি ব্রেকডাউন
var reURLInformation = new RegExp([
'^(https?:)//', // protocol
'(([^:/?#]*)(?::([0-9]+))?)', // host (hostname and port)
'(/{0,1}[^?#]*)', // pathname
'(\\?[^#]*|)', // search
'(#.*|)$' // hash
].join(''));
var match = href.match(reURLInformation);
var loc = window.location; // => "http://example.com:3000/pathname/?search=test#hash"
বর্তমান ইউআরএল প্রদান করে।
আপনি যদি url হিসাবে নিজের স্ট্রিংটি পাস করতে চান ( আই 11 এ কাজ করে না ):
var loc = new URL("http://example.com:3000/pathname/?search=test#hash")
তারপরে আপনি এটিকে পার্স করতে পারেন:
loc.protocol; // => "http:"
loc.host; // => "example.com:3000"
loc.hostname; // => "example.com"
loc.port; // => "3000"
loc.pathname; // => "/pathname/"
loc.hash; // => "#hash"
loc.search; // => "?search=test"
ফ্রেডিফিজিওওয়ারার উত্তরটি বেশ ভাল তবে ইন্টারনেট এক্সপ্লোরার এর মধ্যে আমারও আপেক্ষিক ইউআরএল সমর্থন করা দরকার। আমি নিম্নলিখিত সমাধান নিয়ে এসেছি:
function getLocation(href) {
var location = document.createElement("a");
location.href = href;
// IE doesn't populate all link properties when setting .href with a relative URL,
// however .href will return an absolute URL which then can be used on itself
// to populate these additional fields.
if (location.host == "") {
location.href = location.href;
}
return location;
};
প্রয়োজনীয় বৈশিষ্ট্য পেতে এখন এটি ব্যবহার করুন:
var a = getLocation('http://example.com/aa/bb/');
document.write(a.hostname);
document.write(a.pathname);
জেএসফিডাল উদাহরণ: http://jsfiddle.net/6AEAB/
var locationHost = (location.port !== '80' && location.port !== '443') ? location.host : location.hostname;
var locationOrigin = location.protocol + '//' + locationHost;
js-uri (গুগল কোডে উপলভ্য) স্ট্রিং ইউআরএল নেয় এবং এটি থেকে একটি ইউআরআই অবজেক্ট সমাধান করে:
var some_uri = new URI("http://www.example.com/foo/bar");
alert(some_uri.authority); // www.example.com
alert(some_uri); // http://www.example.com/foo/bar
var blah = new URI("blah");
var blah_full = blah.resolve(some_uri);
alert(blah_full); // http://www.example.com/foo/blah
সাধারণ নিয়মিত অভিব্যক্তি সম্পর্কে কী?
url = "http://www.example.com/path/to/somwhere";
urlParts = /^(?:\w+\:\/\/)?([^\/]+)(.*)$/.exec(url);
hostname = urlParts[1]; // www.example.com
path = urlParts[2]; // /path/to/somwhere
//user:password@example.com/path/x?y=z
এবং আপনি দেখতে পাবেন কেন সাধারণ নিয়মিত প্রকাশটি এটি কেটে না। এখন এটিতে অবৈধ কিছু ফেলে দিন এবং এটিও অনুমানযোগ্য উপায়ে জামিন দেওয়া উচিত।
আজ আমি এই সমস্যার মুখোমুখি হয়েছি এবং আমি পেয়েছি: URL - MDN ওয়েব APIs s
var url = new URL("http://test.example.com/dir/subdir/file.html#hash");
এই রিটার্ন:
{ hash:"#hash", host:"test.example.com", hostname:"test.example.com", href:"http://test.example.com/dir/subdir/file.html#hash", origin:"http://test.example.com", password:"", pathname:"/dir/subdir/file.html", port:"", protocol:"http:", search: "", username: "" }
আমার প্রথম অবদান আশা করি আপনাকে সাহায্য!
এখানে এমন একটি সংস্করণ যা আমি https://gist.github.com/1847816 থেকে অনুলিপি করেছি , তবে আবারও লিখেছি যাতে এটি পড়া এবং ডিবাগ করা সহজ হয়। অ্যাঙ্কর ডেটাটিকে "ফলস" নামের আরেকটি ভেরিয়েবলে অনুলিপি করার উদ্দেশ্য হ'ল অ্যাঙ্কর ডেটা বেশ দীর্ঘ, এবং তাই সীমিত সংখ্যক মানকে ফলাফল অনুলিপি করার ফলে ফলাফলকে সহজতর করতে সহায়তা করবে।
/**
* See: https://gist.github.com/1847816
* Parse a URI, returning an object similar to Location
* Usage: var uri = parseUri("hello?search#hash")
*/
function parseUri(url) {
var result = {};
var anchor = document.createElement('a');
anchor.href = url;
var keys = 'protocol hostname host pathname port search hash href'.split(' ');
for (var keyIndex in keys) {
var currentKey = keys[keyIndex];
result[currentKey] = anchor[currentKey];
}
result.toString = function() { return anchor.href; };
result.requestUri = result.pathname + result.search;
return result;
}
ক্রস ব্রাউজার ইউআরএল পার্সিং , IE 6, 7, 8 এবং 9 এর জন্য আপেক্ষিক পাথ সমস্যাটি ঘিরে কাজ করে :
function ParsedUrl(url) {
var parser = document.createElement("a");
parser.href = url;
// IE 8 and 9 dont load the attributes "protocol" and "host" in case the source URL
// is just a pathname, that is, "/example" and not "http://domain.com/example".
parser.href = parser.href;
// IE 7 and 6 wont load "protocol" and "host" even with the above workaround,
// so we take the protocol/host from window.location and place them manually
if (parser.host === "") {
var newProtocolAndHost = window.location.protocol + "//" + window.location.host;
if (url.charAt(1) === "/") {
parser.href = newProtocolAndHost + url;
} else {
// the regex gets everything up to the last "/"
// /path/takesEverythingUpToAndIncludingTheLastForwardSlash/thisIsIgnored
// "/" is inserted before because IE takes it of from pathname
var currentFolder = ("/"+parser.pathname).match(/.*\//)[0];
parser.href = newProtocolAndHost + currentFolder + url;
}
}
// copies all the properties to this object
var properties = ['host', 'hostname', 'hash', 'href', 'port', 'protocol', 'search'];
for (var i = 0, n = properties.length; i < n; i++) {
this[properties[i]] = parser[properties[i]];
}
// pathname is special because IE takes the "/" of the starting of pathname
this.pathname = (parser.pathname.charAt(0) !== "/" ? "/" : "") + parser.pathname;
}
ব্যবহার ( এখানে ডেমো জেএসফিডাল ):
var myUrl = new ParsedUrl("http://www.example.com:8080/path?query=123#fragment");
ফলাফল:
{
hash: "#fragment"
host: "www.example.com:8080"
hostname: "www.example.com"
href: "http://www.example.com:8080/path?query=123#fragment"
pathname: "/path"
port: "8080"
protocol: "http:"
search: "?query=123"
}
IE, ফায়ারফক্স এবং ক্রোমে কাজ করে এমন একটি আধুনিক সমাধান খুঁজছেন তাদের জন্য:
হাইপারলিংক উপাদান ব্যবহার করে এমন কোনও সমাধান ক্রোমে একই রকম কাজ করবে না।আপনি যদি ক্রোমে কোনও অবৈধ (বা ফাঁকা) url পাস করেন তবে এটি সর্বদা হোস্টটিকে ফিরিয়ে আনবে যেখানে স্ক্রিপ্টটি ডাকা হয়েছিল return আইইতে আপনি খালি পাবেন, অন্যদিকে ক্রোমে আপনি লোকালহোস্ট পাবেন (বা যাই হোক না কেন)।
আপনি যদি রেফারটিকে দেখার চেষ্টা করছেন তবে এটি প্রতারণামূলক। আপনি এটি নিশ্চিত করতে চাইবেন যে আপনি যে হোস্টটি ফিরে পেয়েছেন তা সামাল দেওয়ার জন্য মূল ইউআরএল ছিল:
function getHostNameFromUrl(url) {
// <summary>Parses the domain/host from a given url.</summary>
var a = document.createElement("a");
a.href = url;
// Handle chrome which will default to domain where script is called from if invalid
return url.indexOf(a.hostname) != -1 ? a.hostname : '';
}
কৌণিক জেএস উপায় - এখানে ঝাঁকুনি: http://jsfiddle.net/PT5BG/4/
<!DOCTYPE html>
<html>
<head>
<title>Parse URL using AngularJS</title>
</head>
<body ng-app ng-controller="AppCtrl" ng-init="init()">
<h3>Parse URL using AngularJS</h3>
url: <input type="text" ng-model="url" value="" style="width:780px;">
<ul>
<li>href = {{parser.href}}</li>
<li>protocol = {{parser.protocol}}</li>
<li>host = {{parser.host}}</li>
<li>hostname = {{parser.hostname}}</li>
<li>port = {{parser.port}}</li>
<li>pathname = {{parser.pathname}}</li>
<li>hash = {{parser.hash}}</li>
<li>search = {{parser.search}}</li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script>
function AppCtrl($scope) {
$scope.$watch('url', function() {
$scope.parser.href = $scope.url;
});
$scope.init = function() {
$scope.parser = document.createElement('a');
$scope.url = window.location;
}
}
</script>
</body>
</html>
$document
এবং $window
পরিষেবা ব্যবহার করেন তবে এটি আরও কৌণিক হবে
মডিউল প্যাটার্নটি ব্যবহার করে সহজ এবং দৃust় সমাধান। এটিতে IE এর জন্য একটি স্থিরতা অন্তর্ভুক্ত যেখানে pathname
সর্বদা একটি অগ্রণী ফরোয়ার্ড-স্ল্যাশ থাকে না ( /
)।
আমি জেএসফিডেলের সাথে একটি গিস্ট তৈরি করেছি যা আরও গতিশীল পার্সার সরবরাহ করে। আমি আপনাকে এটি পরীক্ষা করে দেখুন এবং প্রতিক্রিয়া জানান সুপারিশ।
var URLParser = (function (document) {
var PROPS = 'protocol hostname host pathname port search hash href'.split(' ');
var self = function (url) {
this.aEl = document.createElement('a');
this.parse(url);
};
self.prototype.parse = function (url) {
this.aEl.href = url;
if (this.aEl.host == "") {
this.aEl.href = this.aEl.href;
}
PROPS.forEach(function (prop) {
switch (prop) {
case 'hash':
this[prop] = this.aEl[prop].substr(1);
break;
default:
this[prop] = this.aEl[prop];
}
}, this);
if (this.pathname.indexOf('/') !== 0) {
this.pathname = '/' + this.pathname;
}
this.requestUri = this.pathname + this.search;
};
self.prototype.toObj = function () {
var obj = {};
PROPS.forEach(function (prop) {
obj[prop] = this[prop];
}, this);
obj.requestUri = this.requestUri;
return obj;
};
self.prototype.toString = function () {
return this.href;
};
return self;
})(document);
{
"protocol": "https:",
"hostname": "www.example.org",
"host": "www.example.org:5887",
"pathname": "/foo/bar",
"port": "5887",
"search": "?a=1&b=2",
"hash": "section-1",
"href": "https://www.example.org:5887/foo/bar?a=1&b=2#section-1",
"requestUri": "/foo/bar?a=1&b=2"
}
{
"protocol": "ftp:",
"hostname": "www.files.com",
"host": "www.files.com:22",
"pathname": "/folder",
"port": "22",
"search": "?id=7",
"hash": "",
"href": "ftp://www.files.com:22/folder?id=7",
"requestUri": "/folder?id=7"
}
এর জন্য https://www.npmjs.com/package/uri-parse-lib ব্যবহার করুন
var t = parserURI("http://user:pass@example.com:8080/directory/file.ext?query=1&next=4&sed=5#anchor");
কেন এটি ব্যবহার করবেন না?
$scope.get_location=function(url_str){
var parser = document.createElement('a');
parser.href =url_str;//"http://example.com:3000/pathname/?search=test#hash";
var info={
protocol:parser.protocol,
hostname:parser.hostname, // => "example.com"
port:parser.port, // => "3000"
pathname:parser.pathname, // => "/pathname/"
search:parser.search, // => "?search=test"
hash:parser.hash, // => "#hash"
host:parser.host, // => "example.com:3000"
}
return info;
}
alert( JSON.stringify( $scope.get_location("http://localhost:257/index.php/deploy/?asd=asd#asd"),null,4 ) );
আপনি লোকুটাস প্রকল্প (প্রাক্তন php.js) parse_url()
থেকেও ফাংশন ব্যবহার করতে পারেন ।
কোড:
parse_url('http://username:password@hostname/path?arg=value#anchor');
ফলাফল:
{
scheme: 'http',
host: 'hostname',
user: 'username',
pass: 'password',
path: '/path',
query: 'arg=value',
fragment: 'anchor'
}
function parseUrl(url) {
var m = url.match(/^(([^:\/?#]+:)?(?:\/\/((?:([^\/?#:]*):([^\/?#:]*)@)?([^\/?#:]*)(?::([^\/?#:]*))?)))?([^?#]*)(\?[^#]*)?(#.*)?$/),
r = {
hash: m[10] || "", // #asd
host: m[3] || "", // localhost:257
hostname: m[6] || "", // localhost
href: m[0] || "", // http://username:password@localhost:257/deploy/?asd=asd#asd
origin: m[1] || "", // http://username:password@localhost:257
pathname: m[8] || (m[1] ? "/" : ""), // /deploy/
port: m[7] || "", // 257
protocol: m[2] || "", // http:
search: m[9] || "", // ?asd=asd
username: m[4] || "", // username
password: m[5] || "" // password
};
if (r.protocol.length == 2) {
r.protocol = "file:///" + r.protocol.toUpperCase();
r.origin = r.protocol + "//" + r.host;
}
r.href = r.origin + r.pathname + r.search + r.hash;
return m && r;
};
parseUrl("http://username:password@localhost:257/deploy/?asd=asd#asd");
এটি পরম এবং আপেক্ষিক উভয় url- এর সাথে কাজ করে
abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
চাকা পুনরুদ্ধার বন্ধ করুন। Https://github.com/medialize/URI.js/ ব্যবহার করুন
var uri = new URI("http://example.org:80/foo/hello.html");
// get host
uri.host(); // returns string "example.org:80"
// set host
uri.host("example.org:80");
কেবল url.js গ্রন্থাগার (ওয়েব এবং নোড.জেএস এর জন্য) ব্যবহার করুন।
https://github.com/websanova/js-url
url: http://example.com?param=test#param=again
url('?param'); // test
url('#param'); // again
url('protocol'); // http
url('port'); // 80
url('domain'); // example.com
url('tld'); // com
etc...
hostname
এবংpathname
থেকে সরাসরিlocation
বস্তু।