我想用正则表达式分解网站的网址。 URL类似如下:
https://product.testing.com/intro/index.aspx?source=newsletter&product=watch&brand=rolex
我使用的正则表达式如下:
(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?(product\.)(testing\.)(com\/)(.*)(\?|\?)([^=]\w+(?=&))
第一个问题是,我想在aspx之后砍掉这部分?分成一堆,即source = newsletter,product = watch等,代码不适用于最后一部分,我做错了什么,我该怎么改变?
第二个问题是,域名部分是一种硬编码...我怎样才能使它更好,更灵活,例如可以应用于https://contact.testing.com/contactoursales/index.aspx?
提前感谢您的帮助!
答案 0 :(得分:3)
我建议使用url包,而不是正则表达式来解析网址。
const URL = require('url');
const url = 'https://product.testing.com/intro/index.aspx?source=newsletter&product=watch&brand=rolex';
// Pass true to parse the querystring too
const parsed = URL.parse(url, true);
将输出:
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'product.testing.com',
port: null,
hostname: 'product.testing.com',
hash: null,
search: '?source=newsletter&product=watch&brand=rolex',
query: { source: 'newsletter', product: 'watch', brand: 'rolex' },
pathname: '/intro/index.aspx',
path: '/intro/index.aspx?source=newsletter&product=watch&brand=rolex',
href: 'https://product.testing.com/intro/index.aspx?source=newsletter&product=watch&brand=rolex' }
我想在aspx之后切掉这个部分?成碎片,即 source = newsletter,product = watch等,代码不起作用 最后一部分,我做错了什么,我该怎么改变?
将true
作为第二个参数传递给url.parse
将为您解析查询字符串。
console.log(params.query);
/* {
source: 'newsletter',
product: 'watch',
brand: 'rolex'
} */
如果您没有使用node.js,则可以使用webpack在浏览器上使用url
包。
webpack url-parser.js -o url-parser.min.js