改进并完善URL的正则表达式

时间:2018-04-22 21:24:27

标签: javascript regex

我想用正则表达式分解网站的网址。 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?

提前感谢您的帮助!

1 个答案:

答案 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